2010-04-23 1 views
2

테스트 서버에서 제대로 작동하는 다음 정규 표현식이 있지만 호스트 된 서버에서 빈 문자열 만 반환합니다.테스트 및 호스팅 서버의 PHP PCRE 차이점

$text = preg_replace('~[^\\pL\d]+~u', $use, $text); 

는 지금이 유니 코드 속성 지원이 활성화 컴파일되지 않는 PCRE의 호스팅 서버 버전으로 내려 오는 확신 해요.

이 내 서버 :

PCRE version 7.8 2008-09-05 
Compiled with 
UTF-8 support 
Unicode properties support 
Newline sequence is LF 
\R matches all Unicode newlines 
Internal link size = 2 
POSIX malloc threshold = 10 
Default match limit = 10000000 
Default recursion depth limit = 10000000 
Match recursion uses stack 

은 호스팅 서버 :

PCRE version 4.5 01-December-2003 
Compiled with 
UTF-8 support 
Newline character is LF 
Internal link size = 2 
POSIX malloc threshold = 10 
Default match limit = 10000000 
Match recursion uses stack 

이 또한주의 호스팅 서버의 버전이 (같은 버전의 PHP를 컴파일 할 것을 다음과 같이 두 가지 버전의 차이점은 반대)는 꽤 오래되었다.

은 무엇 그러나 나를 혼란, 내 서버에 PHP에서 실행할 때이 정규 표현식은 잘 작동하지만 pcretest이

re> ~[^\\pL\d]+~u 
** Unknown option 'u' 

와 명령 줄에서 두 서버 모두 실패한다는 것입니다.

그래서, 유니 코드 속성이 없기 때문에 호스팅 서버에서 정규 표현식이 실패합니까? 아니면 제가 놓친 다른 것이 있습니까?

감사합니다. Gaz.

답변

2

PCRE 4.5는 UTF-8을 지원하지만 \pL과 같은 유니 코드 속성을 지원하지 않으며이를 활성화하는 /u 플래그를 지원하지 않습니다. 서버의 PCRE를 버전 5.0 이상으로 업그레이드해야합니다. preg_replace()/u을 지원하도록 PHP를 업그레이드해야 할 수도 있습니다.

2

대부분 호스트 서버의 PCRE에 UTF8 지원이 활성화되어 있지 않습니다.

pcretest는 다른 옵션을 사용합니다. 'U'대신 'UTF-8'의 경우 '8'입니다. 이것이 오류의 원인입니다.

같은 PC에서 Apache 또는 CLI 버전의 PHP에서 다른 PCRE 라이브러리를 사용할 수 있습니다.

0

질문에 답변하십시오; 예, 아니오. UTF8 지원이 가능 해지면 PCRE 5.0이 한계점이라고 생각합니다.