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