エスケープ文字にstr_replaceが効かない
フォームで送信された文字列のうち、str_replace関数を使って半角記号を全角記号に置換したいのですが、一部のエスケープ文字が含まれている文字列の置換が上手くいきません。
ソースは以下に記しますが、現状では、"(ダブルクォート)は\"、&(半角アンド)は&と置換されてしまいます。
この場合であれば、”(全角ダブルクォート),&(全角アンド)と出力させたいのですが・・・
どなたかお気づきの点ありましたらご教示宜しくお願いします!
===============ソースコード=================================
<?php
$system = "";
if (isset($_POST["submit"])) {
$system = htmlspecialchars($_POST["system"], ENT_QUOTES);
$system = mb_convert_encoding($system, "EUC-JP", "SJIS");
$system = str_replace('&', '&', $system);
$system = str_replace('"', '”', $system);
$system = str_replace('あ', '”', $system);
$_SESSION["system"] = $system;
}
$str = <<<STRING
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
<form method="post" action="{$SERVER['PHP_SELF']}" enctype="multipart/form-data" >
<textarea name="system" cols=40 rows=5 wrap=soft>{$system}</textarea>
<input type="submit" name="submit" value="送信">
</form>
----------------------------------------------------------<br>
{$_SESSION["system"]}
</body>
</html>
STRING;
$str = mb_convert_encoding($str, "SJIS", "EUC-JP");
echo $str;
?>
============================================================
ちなみに、『あ』→『”(全角ダブルクォート)』と、正しく置換されます。
お礼
お返事をありがとうございます。 おっしゃるとうり、mb_ereg_replaceで行いましたら、無事に文字化けが回復いたしました。 ありがとうございました。