2010-06-29 4 views
2

에 나는 MySQL의 테이블에서 바로 오는 문자열유니 코드 preg_replace이다 문제는 PHP

$result = "bei einer Temperatur, die etwa 20 bis 60°C unterhalb des Schmelzpunktes der kristallinen Modifikation" 

있어요. 테이블은, 그리고 PHP 헤더는 모두 UTF-8

나는이 '도'기호 제거 할

로 설정됩니다 http://en.wikipedia.org/wiki/Degree_symbol를 단어로 교체 '도'를 얻을 수 :

"BEI einer 그리고 온도를, 20시 20 분에서 60도까지 수정이 가능합니다. "

하지만 preg_replace와 함께 사용할 수 없습니다.

내가 할 경우

$result = preg_replace('/\xB0/u'," degrees ", $result); - I get an empty string 

을 그리고 난 ::

$result = preg_replace('/\u00B0/u'," degrees ", $result); - I get the error: 

경고 할 경우 : 컴파일이 실패 : PCRE는 \의 L를 지원하지 않습니다 preg_replace이다()를 [function.preg-교체] , \ l, \ N, \ U 또는 \ u/offset/1에서 /var/www/html/includes/classes/redeyeTable.inc.php 75 줄에

인코딩이 좋지 않습니다. 여기서 내가 뭘 잘못하고 있니?

+0

내가 게시 한 첫 번째 해결책은 나를 위해 완벽하게 작동합니다. – Sjoerd

+0

이 페이지 (및 오류 메시지 BTW)에 따르면 \ uhttp : //fr.php.net/manual/en/reference.pcre.pattern.differences.php를 사용할 수 없습니다 – greg0ire

+0

상징? 유니 코드에는 많은 유사한 문자가 있습니다. – Kobi

답변

4

'u'한정자를 사용하는 경우 패턴은 utf-8로 취급되기 때문에 '\ u00B0'또는 '\ xB0'대신 '°'라고 쓰면 어떨까요?

+1

$ 결과 = preg_replace ('/ °/u', "degrees", $ result); 작동합니까 ... 왜 16 진수로 문자열을 제공하지 않습니까? –

20

사용

$result = preg_replace('/\x{00B0}/u'," degrees ", $result); 

\x{FFFF} - 구문에 대한 자세한 내용은 here를 참조하십시오.

  • \xB0 16 진수 코드 B0 (176 진수)와 단일 문자를 나타내고, ISO-8859-1에서도 기호 (°) 용이다

    \xB0\x{00B0}의 차이를 주목하는 것이 중요 예 :

  • \x{00B0}은 유니 코드 시스템에서 학위 기호 (°)를 설명하는 유니 코드 코드 포인트 U+00B0을 나타냅니다. 이 코드 포인트는 UTF-8 인코딩을 사용할 때 2 바이트 \xC2\xB0을 사용하여 인코딩됩니다.
+0

그게 효과가있어!스테판과 기여한 모든 분들께 감사드립니다. 내 실수로 유니 코드 코드 포인트 주위에 {}을 사용하지 않았습니다. \ xB0와 \ x {00B0}의 차이점을 고맙게 생각합니다. 유니 코드 문자열에 대한 \ xB0 대체를 위해 정정해야했던 필사적 인 시행 착오였습니다. Stackoverflow는 생명의 은인입니다. –

+2

@ Ed : 응답을 "수락"으로 표시하여 다른 사용자에게 이것이 문제의 해결책임을 알릴 수 있습니다. –

+0

몇 시간 동안 UTF8 문자를 대체 할 정규 표현식이 작동하지 않고 왜 \ xNN 대 \ x {NN}인가에 대한 트릭으로 인해 몇 시간을 소비했는지 알지 못했습니다. 많은 Stefan :-) – dregad