0

二重引用符または単一引用符をエスケープするために、正規表現の後方参照を使用しました。

$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 を持っていません。確認できますか?

4

1 に答える 1