Я использую 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 ()