preg_replace를 사용하여 PHP에서 $를 피하는 방법은 무엇입니까?
-
12-09-2019 - |
문제
나는 사용 중입니다 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 () 대신에.
다른 팁
정답은 PHP의 탈출 문자를 사용하여 반 슬래시와 달러 표시를 탈출해야한다는 것입니다.
backslash = \\
dollar sign = \$
$tmpStr=preg_replace("/\\\$/", "\\$", $tmpStr);
이것은 달러 표시가 포함 된 문자열과 일치 해야하는 사람에게 유용합니다.
당신의 문제는 탈출 중 하나 인 것 같습니다. 단일 따옴표 ('
) PHP에서 이중 인용문과 다르게 작동합니다 ("
). 그것은 단독으로 인용 된 문자열에서 가변 보간이 발생하지 않는 Perl과 비슷합니다.$
) 메타 문자가 아닙니다.
print "\$"; # prints $
print '\$'; # prints \$
또한 Perl의 캐릭터 클래스는 코드를 단순화합니다.
$tmpStr = preg_replace('/([?#^&*()$\\/])/', '\\\\$1', $tmpStr);
그렇습니다 \\$
PHP에 의해 보인다 $
이중 인용 문자열로. 즉, PHP를 참조해야합니다 \$
말함으로써 \\\$
.
방금 시도했습니다 preg_replace("/\\\$$k\\\$/", $v, $data)
그리고 실제로 그것은 작동합니다 (발생합니다 $KEY$
가치와 함께.
IIRC 당신은 $를 $로 대체합니다. 따라서 $$ 여야합니다
당신은 또한 시도 할 수 있습니다
$tmpStr=preg_replace('/\$/', '\$', $tmpStr);
php가 $를 $로 본다는 것이 사실이 아닙니까? 나는 이것을 테스트하지 않았다.
PHP는 첫 번째이며 "/ $/"를 "/ $/"로 대체하면 Preg 엔진이 마법입니다. 불행히도 $ $는 정규 표현 연산자입니다 (문자열의 끝과 일치한다고 생각합니까?). 텍스트에서 $ -Characters를 찾지 못하지만
나는 당신이해야 할 일이 그렇게하는 것과 같은 $ -Character를 더블에 탈출하는 것입니다.
$ tmpstr = preg_replace ( "/ $/", " $", $ tmpstr);
또한 ..이 경우 방금 str_replace ()를 사용했을 것입니다.
$pattern = preg_replace('/\$(.+)/', '\\\$$1', $pattern);
PHP에서는 HTML에 사용 된 특정 "$"의 경우, 엔티티를 위해 이전 교체를 수행 할 수도 있습니다.
$tmpStr = str_replace('$', '$',$tmpStr);
AddSlashes ()를 사용해 보시겠습니까?