アプリ版:「スタンプのみでお礼する」機能のリリースについて

フォームで送信された文字列のうち、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;
?>
============================================================
ちなみに、『あ』→『”(全角ダブルクォート)』と、正しく置換されます。

A 回答 (1件)

そういうソースになっているとしか言えません。

最初に下記の処理がありますから。

>$system = htmlspecialchars($_POST["system"], ENT_QUOTES);

ENT_QUOTESは、通常の処理に加えて単引用符の処理も行う・・という意味なので、アンパサンドや二重引用符は処理(エスケープ)されます。

  http://jp2.php.net/manual/ja/function.htmlspecia …
    • good
    • 0
この回答へのお礼

なるほど。。
$system = str_replace('&amp;', '&', $system);
$system = str_replace('\&quot;', '”', $system);
こう書かなければならなかったのですね!
大変参考になりました。ありがとうございます☆

お礼日時:2008/05/18 16:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!