PHPで置換できなかったのは文字コードのせいだった

phpでhtmlを読み込んで内容の一部を置換したあと、別ファイルとして保存したかったんだけど、str_replaceで置換ができず悩んでた。

原因としては phpとhtmlの文字コードが違っていたためphpで文字コードを合わせる必要があった。

phpはUTF-8で、読み込む&書き出すhtmlはShift-JIS。
なのでstr_replaceの前に置換指定の文字列をShift-JISに変換する必要があった。mb_convert_encoding でShift-JISに変換したら置換できた。

<いきなり置換しようとしてNGだった例>
$str ; // html(Shift-JIS)を読み込んだ文字列
$beforeword = ‘置換前の文字’;
$afterword = ‘置換後の文字’;
str_replace( $beforeword, $afterword, $str );

<文字コード変換したら置換できた>
$str
$beforeword = mb_convert_encoding(‘置換前の文字’,’SJIS’,’UTF-8′);
$afterword = mb_convert_encoding(‘置換後の文字’,’SJIS’,’UTF-8′);
str_replace( $beforeword, $afterword, $str );

ググってもこんな基礎的なことでつまづく人はいないらしく、検索にヒットしなかったなぁ。

コーディングに関する記事

コメント