どのようにpreg_replaceを使用してPHPで$をエスケープするには?
-
12-09-2019 - |
質問
私は特殊文字をエスケープするpreg_replace
を使用しています:
$tmpStr=preg_replace("/\?/", "\?", $tmpStr);
$tmpStr=preg_replace("/\#/", "\#", $tmpStr);
$tmpStr=preg_replace("/\^/", "\^", $tmpStr);
$tmpStr=preg_replace("/\&/", "\&", $tmpStr);
$tmpStr=preg_replace("/\*/", "\*", $tmpStr);
$tmpStr=preg_replace("/\(/", "\(", $tmpStr);
$tmpStr=preg_replace("/\)/", "\)", $tmpStr);
$tmpStr=preg_replace("/\//", "\/", $tmpStr);
しかし、私は同じ機能を使用して$
を脱出することはできませんよ。
$tmpStr=preg_replace("/\$/", "\$", $tmpStr);
そして、私は上記のステートメントを使用する場合も、すべてのスペースが$
と$
に置き換えられますがエスケープ取得されていません。
どのように私が正しくドル記号をエスケープしますか?
解決
私は強く使用することをお勧めします preg_quote()の代わりに。
他のヒント
$記号は、
ので、自分自身でエスケープする必要があります$tmpStr=preg_replace("/$$/", "\$", $tmpStr);
私はまた、代わりににaddslashesするに見えるように助言します。
正解はあなたがPHPのエスケープ文字を使用して正規表現でバックスラッシュとドル記号をエスケープしなければならないということです。
backslash = \\
dollar sign = \$
$tmpStr=preg_replace("/\\\$/", "\\$", $tmpStr);
これは、ドル記号を含む文字列を一致させる必要がある人のために便利です。
あなたの問題がエスケープの一つであるように見えます。 PHPでの単一引用符('
)は、二重引用符("
)とは異なる動作します。それは多くの変数補間は単独で、引用符で囲まれた文字列では発生しないPerlの、のようだし、ドル記号($
)はメタ文字ではありません。
print "\$"; # prints $
print '\$'; # prints \$
また、あなたのコードを簡素化しますPerlの文字クラスます:
$tmpStr = preg_replace('/([?#^&*()$\\/])/', '\\\\$1', $tmpStr);
はい、\\$
は、二重引用符で囲まれた文字列で$
としてPHPで見られているように見えるん。
それはあなたがPHPを\$
を言って\\\$
を参照してください確認する必要がありますを意味します。
私はちょうどpreg_replace("/\\\$$k\\\$/", $v, $data)
を試してみましたが、確かにそれはVALUEで$KEY$
の発生を置き換える(働きます。
IIRCあなたは$と$を交換してください。だから、$$する必要があります。
また、試すことができます。
$tmpStr=preg_replace('/\$/', '\$', $tmpStr);
これは、PHPが$として\ $を見ているというのは本当ではないのですか? 私はそれがこのように行くかもしれない、これをテストしていません。
PHPが最初で、 "/ $ /" であなたの "/ \ $ /" を置き換え その後、プリプレグエンジンは、それは魔法だ...残念ながら、$は正規表現演算子(私はそれが文字列の末尾にマッチすると考えている?)あるんので、それはあなたのテキスト内の$ -charactersを見つけることができませんがします。
私が思うに、あなたが何をする必要があるか、そのような$の-characterを逃れるdoubbleすることです。
$ tmpStr =にpreg_replace( "/ \ $ /"、 "\ $"、$ tmpStr);
また..この場合、私は使用しているだろうstr_replace()
$pattern = preg_replace('/\$(.+)/', '\\\$$1', $pattern);
PHPでは、HTMLで使用される「$」の特定の場合のために、あなたも行うことができます:
$tmpStr = str_replace('$', '$',$tmpStr);
()にaddslashesを試してみてください!
チェック php.net /にaddslashes()の