2020年10月13日火曜日

str_replace はマルチバイト対応関数です

初心者がよく勘違いする関数に、 str_replace があります。

str_replace はマルチバイトに対応していないと思い込み、 mb_str_replace を自作したり、他の関数で代替する人がいます。

文字化けする理由は簡単です。
文字コードが正常に設定されていない状態ですので、正しく設定してください。
これについては、公式のドキュメントにもユーザーコメントがあります。

https://www.php.net/manual/ja/ref.mbstring.php

たとえば、PHPのデフォルトエンコードがUTF-8に設定されているのに、ソースファイルをEUCにするとマルチバイトの扱いが大変になり文字化けの原因となります。不慣れな初心者がやりがちです。

文字化けだけならいいですが、文字コードが正しく扱えていないと脆弱性が発生する可能性があります。

文字コードは正しく扱いましょう。