문제

나는 사용 중입니다 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);

나는 또한 살펴 보는 것이 좋습니다 추가 슬래시 대신에.

정답은 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 ()를 사용해 보시겠습니까?

확인하다php.net / addslashes ()

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top