2009-04-20 15 views
5

ich preg_replace bin mit Sonderzeichen zu entkommen:

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

Aber ich bin nicht in der Lage $ mit der gleichen Funktion zu entkommen:

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

Und auch, wenn ich die alle Räume über Anweisung erhalten ersetzt durch $ und $ wird nicht entkommen.

Wie entkomme ich das Dollarzeichen richtig?

Antwort

12

ich stark preg_quote() stattdessen verwenden würde empfehlen.

+0

Ich würde diese Antwort hilfreicher finden, wenn es die Gründe für die Verwendung von preg_quote anstelle von preg_replace gab. Es wäre auch schön zu wissen, warum der preg_replace-Ansatz nicht dazu diente, das Dollarzeichen zu umgehen. –

+1

@RandallStewart "preg_quote statt preg_replace"? Diese beiden Funktionen sind nicht ersetzbar, Sie können nicht eine anstelle der anderen verwenden, Sie verwenden 'preg_quote', um Werte in regulären Ausdruckstrings (innerhalb von' preg_replace') zu entfernen. –

0

IIRC ersetzen Sie $ durch $. So sollte es $$

Sie sich auch

versuchen
$tmpStr=preg_replace('/\$/', '\$', $tmpStr); 
+1

Ich habe das versucht ... es hat nicht funktioniert ... :( –

4

Das $ -Zeichen hat mit sich selbst zu entkommen, so

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

Ich würde auch stattdessen addslashes suchen beraten.

0

ist es nicht wahr, dass PHP \ $ als $ sieht? Ich habe das nicht getestet, es könnte so gehen;

php ist zuerst, und ersetzt Ihr "/ \ $ /" mit "/ $ /" dann ist die Preg-Engine es magisch .. leider $ ist ein regulärer Ausdruck-Operator (ich glaube, es entspricht dem Ende eines string?), so dass es nicht die $ -Zeichen in Ihrem Text findet, sondern

Ich denke, was Sie tun müssen, ist es, das $ -Zeichen wie das Zweifache zu entkommen;

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

Auch .. in diesem Fall hätte ich nur verwendet str_replace()

3

Sieht aus wie Ihr Problem einer zu entkommen ist. Einfache Anführungszeichen (') in PHP funktionieren anders als doppelte Anführungszeichen ("). Es ist ein viel wie in Perl, wo variable Interpolation nicht in einzeln-Strings in Anführungszeichen geschieht, und das Dollarzeichen ($) ist kein Meta-Charakter:

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

Auch Perl-Zeichenklassen werden Ihren Code vereinfachen:

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

die richtige Antwort ist, dass Sie den umgekehrten Schrägstrich und das Dollarzeichen in der Regex PHP-Escape-Zeichen entkommen muss.

backslash = \\ 
dollar sign = \$ 

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

Dies ist nützlich für alle, die mit einem String übereinstimmen müssen, der ein Dollarzeichen enthält.

2

Ja, es scheint, dass \\$ von PHP als $ in einer Zeichenfolge mit doppelten Anführungszeichen gesehen wird. Das bedeutet, Sie müssen PHP sehen \$ sagen \\\$.

Ich habe gerade versucht preg_replace("/\\\$$k\\\$/", $v, $data) und in der Tat funktioniert es (ersetzt Vorkommen von $KEY$ mit VALUE

-1

In PHP, für den speziellen Fall von „$“ in HTML verwendet werden, können Sie auch eine vorherige für seine Einheit ersetzen.:

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

Könnten Sie einige Details bezüglich Ihres Codes und dessen hinzufügen? adressiert das Problem in der Frage? Code-Only-Antworten sind nicht sehr nützlich, besonders für zukünftige Leser, die auf diesen Beitrag stoßen. Vielen Dank, – Cristik