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

どうもお久しぶりです。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作業ができるので、ブログ更新頻度もぼちぼちあげていきます〜。

 

ではでは。

 

 

2018/04/14追記
PHPも一度まともに勉強してみたい。
PHP ,
コメントは認証制です。詳しくは下記の注意をお読みください。お気軽にコメントお願いします!

コメントを残す

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。