うるおいらんど

【PHP】str_replaceで指定した括弧[]や波〜などが置き換えられなかった話

PHP文字コード

追記があります。

どうもお久しぶりです。Reoです。

2ヶ月ぶりの更新・・・!ナンテコッタ

 

今日は慣れないPHP作業で、少し行き詰まった話をしていこうと思います。

 

とある文字列から特定の文字を置き換える時にstr_replaceという関数を用います。

例えば

//この文字列の〜の部分を置き換えたい
$hoge = "2017/7/23〜2017/7/24";

//〜を・に置き換えたい
$newHoge = str_replace("~","・",$hoge);

//結果
echo $newHoge . "\n";

この結果が2017/7/23・2017/7/24になって欲しいのに、そうならない時があるんですね。

 

わたしが引っかかったのは角括弧[]と波ダッシュ〜なんですが、こいつら同じ括弧や波に見えて、何種類か種類があるんですね。

HTML数値文字参照変換でチェックできるのですが、~と〜は違う波なんですね。

同様に、[と[は違う括弧なんですね。

括弧の方は違うってわかりますが、波はもう一緒じゃねーかって感じです・・・。

気になる人はwikiを見てみてください。括弧波ダッシュ

 

フォントが違えばさらにわかりづらくなるんですが、こいつらは別物として扱われてしまうので、〜を・に置き換えようとした時に、引っかからない・・・。

 

対応策は当てはまるまで試してみるしかワカラナイ!!

//この文字列の〜の部分を置き換えたい
$hoge = "2017/7/23〜2017/7/24";

//〜を・に置き換えたい
$newHoge = str_replace(array("~","〜"),"・",$hoge);

//結果
echo $newHoge . "\n";

 

どっちも置き換え対象にしてやることでとりあえずは解決したんですが、こうするしかないのかしらん。

もっといい方法がありそうな気がするけれどどうなんでしょう。

 

文字コード問題なのでPHPに限らずなんでしょうが、見た目が同じでも実は別物の可能性があるということを覚えておこうと思います。

 

同様の問題に引っかかった方は、対応の文字とstr_replaceで置き換えようとしている文字の文字参照を調べてみてください〜〜。

str_replaceに限らず、strposとかexplodeとか文字判定を行うものだと同様の問題が起こるので、疑ってみてください。

 

 

 

2ヶ月ぶりの更新ですが別にサボってたわけじゃないですヨ!!!!!

リアルではとにかくメチャクチャいろんなことがあった気がします。

またしばらくはPC作業ができるので、ブログ更新頻度もぼちぼちあげていきます〜。

 

ではでは。

Additional Notes追記

PHPも一度まともに勉強してみたい。

Comments

コメントはありません。

現在コメントフォームは工事中です。