Как избежать $ в PHP с помощью preg_replace?

Я использую preg_replace для 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); 

Я бы посоветовал вместо этого взглянуть на addlashes .

Похоже, ваша проблема – это побег. Одиночные кавычки ( ' ) в PHP работают иначе, чем двойные кавычки ( " ). Это очень похоже на Perl, где переменная интерполяция не выполняется в строках с одним кавычком, а знак доллара ( $ ) не является метасимволом:

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

Кроме того, классы символов Perl упростят ваш код:

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

Правильный ответ заключается в том, что вы должны избегать обратной косой черты и знак доллара в регулярном выражении с помощью escape-символов PHP.

 backslash = \\ dollar sign = \$ $tmpStr=preg_replace("/\\\$/", "\\$", $tmpStr); 

Это полезно для тех, кто должен соответствовать строке, содержащей знак доллара.

Да, кажется, что \\$ рассматривается PHP как $ в строке с двумя кавычками. Это означает, что вы должны заставить PHP видеть a \$ , говоря \\\$ .

Я просто попробовал preg_replace("/\\\$$k\\\$/", $v, $data) и действительно работает (заменяет вхождения $KEY$ с VALUE.

IIRC вы заменяете $ на $. Так что это должно быть $$

Вы также можете попробовать

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

не правда ли, что PHP видит \ $ как $? Я не проверял это, это может пойти так;

php является первым и заменяет ваш «/ \ $ /» на «/ $ /», тогда движок preg делает это волшебным. К сожалению, $ является оператором регулярного выражения (я считаю, что он соответствует концу строки?), поэтому он не находит символы $ в вашем тексте, но будет

Я думаю, что вам нужно сделать, это свести к минимуму $ -character;

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

Также .. в этом случае я бы просто использовал str_replace ()

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

В PHP для конкретного случая «$», используемого в HTML, вы также можете выполнить предыдущую замену для своей сущности:

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

Попробуйте addlashes ()?

Проверьте php.net / addslashes ()