나는 국제 수학 그룹을 지원하기 위해 고안된 포럼을 운영합니다. 나는 최근에 국제 문자에 대한 더 나은 지원을 위해 유니 코드로 전환했습니다. 이 전환을 디버깅 할 때 모든 유니 코드 문자가 유효한 XHTML로 간주되는 것은 아니며 관련 웹 사이트는 http://www.w3.org/TR/unicode-xml/ 인 것으로 나타났습니다. 게시물을 브라우저에 표시하기 전에 포럼 소프트웨어가 수행하는 단계 중 하나는 XHTML 확인/sanitisation 단계입니다. 그 단계에서 XHTML이 좋아하지 않는 유니 코드 문자를 제거해야한다는 것은 합당한 생각입니다.PHP를 사용하여 XHTML이 유효하지 않은 유니 코드 문자를 제거하는 가장 좋은 방법은 무엇입니까?
그래서 제 질문은 : 표준 (또는 최고) PHP에서이 일의 방법은
있습니까?
이 (포럼은 그런데, PHP로 작성된 것입니다.)
내가 그 또한 최선의 경우 안전 장치가 (간단한 str_replace
될 것이라고 생각, 내가 확인하기 위해 추가 작업을 수행 할 필요합니까 그것은 유니 코드와 제대로 작동합니까?) 그러나 그게 XHTML DTD (위 참조 된 W3 페이지)를 통해 검색 부분에 나열 할 문자를 파악해야하므로이 경우 가장 좋은 방법은 이미 누군가가 그것을 훔칠 수 있도록, 잘못, 복사, 그것을 했나요?
(유효 HTML 만 유효 XHTML은 또한, 문제의 원인이 된 캐릭터가합니다 (W3 페이지에 따라 '폼 피드'U + 000C,,)이었다입니다!)
나는 이것이 preg_replace 메소드 (특히 http://php.net/manual/en/regexp.reference.unicode.php에서 속도에 대한 설명이 주어짐), 내 자신의 화이트리스트를 찾아야하는 것과 같은 단점이 있습니다! (게으른 것에 대한 위의 주석을보십시오!) –
자신의 화이트리스트를 알아낼 필요가 없습니다. 문자는 ASCII 코드를 기반으로 허용되며 함수에 의해 지정된 범위를 벗어나면 공백으로 바뀝니다. 나는 이것이 당신이 필요로 할 모든 것이라고 확신합니다, 화이트리스트는 이미 기능에 있습니다. – Bas
확실히 그 기능에는 * 하나 * 화이트리스트가 있지만 올바른 화이트리스트라는 것을 어떻게 알 수 있습니까? 예를 들어 HTML에서는 0xC가 허용되지만 XHTML에서는 허용되지 않습니다. 허용 목록에서 작업하는 경우 DTD에서 어떻게 든 생성되어야합니다. –