2010-07-20 4 views

답변

8

문제의 일부는 대상을 UTF-8 문자열로 취급하지 않는다는 것입니다. 이를 위해 /u 수정자가 필요합니다. 또한 UTF-8에서 ASCII가 아닌 문자는 두 개 이상의 바이트로 표시되며 모두 \x80..\xFF 범위에 있습니다. 이 시도 :

preg_replace('/\p{Cc}+/u', '', $value) 

\p{Cc}가 제어 문자의 유니 코드 속성이며, u 원인 모두 정규식 대상 문자열이 UTF-8로 처리 할 수 ​​있습니다.

+0

폴란드어 보조 문자 (예 : ± ńśś)와 같이 ASCII 범위를 벗어나는 유효한 문자를 남기시겠습니까? 나는 유효하지 않은 UTF-8 시퀀스를 제거 할 정규 표현식을 찾고있다. (그래서 MySQL은 데이터베이스에 그러한 문자열을 삽입하는 동안 불평하지 않을 것이다.) 그러나 다른 모든 것은 그대로 둔다. – pako

+0

''/ \ P {Any}/u '' - Any는 자명하고'\ P {}'(대문자)는'\ p {}'. 그러나 나는 그 무효 바이트 순서가 처음에 어떻게 들어 왔는지에 더 관심이 있습니다. –

5

사용할 수 Unicode character properties

preg_replace('/[^\p{L}\s]/u','',$value); 

더는 fullproof하지만 일부 좋은 번역과 의미로는, ASCII로 유니 코드를 되돌리려하지 않는 경우

을 (당신은을 통해 수 있도록 할 다른 클래스를 추가 수행) :

echo iconv('utf-8','ascii//translit','éñó'); //prints 'eno' 
+0

참고 : 위의 URL이 손상되어 있으므로 답변을 수정할 수 없습니다. 올바른 URL : http://php.net/manual/en/regexp.reference.unicode.php – DOOManiac

+0

@DOOManiac : 확인해 주셔서 감사합니다. URL이 수정되었습니다. – Wrikken

관련 문제