Preg_replace kullanarak PHP $ kaçmayı nasıl?

7 Cevap php

I preg_replace özel karakterler kaçmak için kullanıyorum:

$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); 

Ama ben $ aynı işlevi kullanarak kaçmak mümkün değilim:

$tmpStr=preg_replace("/\$/", "\$", $tmpStr);

Ben yukarıdaki deyimi kullandığınızda ve aynı zamanda tüm alanlarda $ yerini almak ve $ kaçtı almıyor.

Nasıl doğru dolar işareti kaçış?

7 Cevap

Ben kuvvetle yerine preg_quote() kullanarak öneriyoruz.

$ Işareti kendisi ile kaçtı zorundadır böylece

$tmpStr=preg_replace("/$$/", "\$", $tmpStr);

Ben de onun yerine addslashes bakmak için tavsiye ederiz.

Sorunun kaçan biri gibi görünüyor. Tek tırnak (') farklı çift tırnak daha PHP çalışmalarında ("). : Bu çok Perl, değişken yorumlanır tek başlarına tırnakla olmaz, ve dolar işareti ($) bir meta-karakter değil gibi var

print "\$"; # prints $
print '\$'; # prints \$

Ayrıca, Perl karakter sınıfları kodunuzu basitleştirmek olacaktır:

$tmpStr = preg_replace('/([?#^&*()$\\/])/', '\\\\$1', $tmpStr);

Yes, it does seem that \\$ is seen by PHP as $ in a double-quoted string. That means you have to make PHP see a \$ by saying \\\$ .

Ben sadece preg_replace("/\\\$$k\\\$/", $v, $data) denedim ve gerçekten de DEĞER ile $KEY$ tekrarlarını yerini (çalışır.

IIRC Eğer $ $ ile değiştirin. Bu yüzden olmalı $ $

Ayrıca deneyebilirsiniz

$tmpStr=preg_replace('/\$/', '\$', $tmpStr);

isn't it true that PHP sees \$ as $ ? I haven't tested this out, it might go like this;

php is first, and replaces your "/\$/" with "/$/" then the preg engine does it's magic .. unfortunately, $ is a regular expression operator ( I believe it matches the end of a string?), so it doesn't find the $-characters in your text but will

Bence, yapmanız gereken şey, bu yüzden gibi $-kaçış karakteri doubble için;

$ TmpStr = preg_replace ("/ \ $ /", "\ $", $ tmpStr);

Ayrıca .. bu durumda, sadece kullanılan olurdu str_replace ()

Doğru cevap PHP'nin kaçış karakterlerini kullanarak regex ters eğik çizgi ve dolar işareti kaçmak zorunda olmasıdır.

backslash = \\
dollar sign = \$

$tmpStr=preg_replace("/\\\$/", "\\$", $tmpStr);

Bu bir dolar işareti içeren bir dize maç için ihtiyaç duyan herkes için yararlıdır.