二重引用符または単一引用符をエスケープするために、正規表現の後方参照を使用しました。
$strVal = '<div class="xclassname">Contents</div>';
$strVal = preg_replace("/([\"\'])/", "\\\\1", $strVal);
これにより、通常、次の文字列が得られました(年以来):
"<div class=\"xclassname\">Contents</div>"
二重引用符は C++ スタイルで正しくエスケープされています。
しかし、今日、PHP 5.5.3 で次の結果が得られます。
"<div class=\1xclassname\1>Contents</div>"
二重引用符が悪い \1 文字列に置き換えられます。
今、私はこれを使用する必要があります:
$strVal = preg_replace("/([\"\'])/", "\\\\\${1}", $strVal);
私の Windows 7 OS では preg_replace() が不安定です。
このような状況に遭遇したことがありますか?なぜですか?
追加した:
数週間前に PHP 5.3 を PHP 5.5.3 にアップデートしたことを忘れていました。
preg_replace("/([\"\'])/", "\\\\1", $strVal); // is OK for PHP5.3.x, but
preg_replace("/([\"\'])/", "\\\\1", $strVal); // is bad for PHP5.5.x.
preg_replace("/([\"\'])/", "\\\\\${1}", $strVal); // is good for PHP5.5.x.
それだけです。私は複数のバージョンの PHP を持っていません。確認できますか?