Pergunta

Eu estou usando preg_replace para escapar caracteres especiais:

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

Mas eu não sou capaz de escapar $ usando a mesma função:

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

E também quando eu usar a declaração acima de tudo, os espaços são substituídos por $ e $ é não se escapou.

Como faço para escapar do dólar corretamente?

Foi útil?

Solução

Eu recomendaria fortemente usando preg_quote () .

Outras dicas

O sinal $ tem de ser escapado com ele mesmo assim

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

Eu também aconselho a olhar para addslashes .

A resposta correta é que você deve escapar da barra invertida e do dólar na regex usando caracteres de escape do PHP.

backslash = \\
dollar sign = \$

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

Este é útil para qualquer pessoa que precisa encontrar uma string que contém um sinal de dólar.

Parece que seu problema é um dos escapar. aspas simples (') em PHP funcionar de forma diferente do que aspas duplas ("). É muito como em Perl, onde interpolação variável não acontece em cordas individualmente citadas, e do dólar ($) não é uma meta-caracteres:

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

Além disso, classes de personagens do Perl irá simplificar o seu código:

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

Sim, parece que \\$ é visto por PHP como $ em uma string entre aspas. Isso significa que você tem que fazer PHP ver um \$ dizendo \\\$.

Eu apenas tentei preg_replace("/\\\$$k\\\$/", $v, $data) e na verdade ele funciona (substitui ocorrências de $KEY$ com o valor.

IIRC você substitua $ com $. Assim deve ser $$

Você também pode tentar

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

Não é verdade que PHP vê \ $ quanto $? Eu não testei isso, pode ir assim;

php é o primeiro, e substitui o "/ \ $ /" com "/ $ /" então o motor preg faz é mágico .. infelizmente, $ é um operador de expressão regular (creio que corresponde à extremidade de uma corda?), para que ele não encontrar os $ -Personagens em seu texto, mas irá

Eu acho que, o que você precisa fazer, é Doubble escapar o $ -character gosta assim;

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

str_replace Também .. neste caso, eu teria apenas usado ()

$pattern = preg_replace('/\$(.+)/', '\\\$$1', $pattern);

Em PHP, para o caso particular de "$" usado em HTML, você pode também fazer um anterior substituir pela sua entidade:

$tmpStr = str_replace('$', '$',$tmpStr);

Tente addslashes ()?

Verifique php.net / addslashes ()

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top