2011-10-03 9 views
2

PHP에서 utf8 문자열을 가져 오는 중입니다.악센트 부호가있는 문자를 인코딩하는 방법

나는 iconv()와 내가 잘못 악센트 나는 아무것도) (일부 인코딩과 제거 ...이 ... 차이 기능을 많이 사용하여 ... 악센트를 제거하려고하지만 여전히 문제가

serialize(mystring)을 사용할 때 내 잘못된 문자 모양은 다음과 같습니다. xE3xA0 (char에 따라 다름)

내가 사용할 수있는 철저한지도가 있습니까? 다른 방법이 있습니까?

(내가 PHP 5.2에서 오전 서버에서 실제 제어 그래서 국제/표준화를 사용할 수 없습니다)


편집 :이 나던 작품 (그렇지 않으면 추한하지만 짧은에 대한 효율적인 것 같은 코드 용어)

$string = mb_ereg_replace('(À|Á|Â|Ã|Ä|Å|à|á|â|ã|ä|å)','a',$string); 
+0

어떻게 iconv를 사용 했습니까? – Andrea

+0

나는 $ word = iconv ('UTF-8', 'ASCII // TRANSLIT // 무시하다', $ word)로 시도한다. 및 iconv ('ISO-8859-1'...); 또한 iconv가 작동하지 않는 것처럼 setlocale() ... – AlphaB

답변

0

간단한 문장의 경우에는 항상 Sjoerd answer을 사용하고 작동합니다. 이러한 가능성이 일부 HTML을 포함하여 길고 복잡한 단락, 같은 더 복잡한 경우, 나는이 방법으로는 제거하기, 그것은 해당 HTML 엔티티에 비 ASCII의 문자를 대체 할

require_once dirname(__FILE__) . '/htmlpurifier/HTMLPurifier.auto.php'; 
$config = HTMLPurifier_Config::createDefault(); 
$config->set('Core.Encoding', 'utf-8'); 
$config->set('Core.EscapeNonASCIICharacters', true); 
$config->set('Cache.SerializerPath', sys_get_temp_dir()); 
$config->set('HTML.Allowed', 'a[href],strong,b,i,p'); 
$config->set('HTML.TidyLevel', 'heavy'); 
$purifier = new HTMLPurifier($config); 
echo $purifier->purify('òàòààòòààè'); 

옵션

이 세트 HTMLPurifier library를 사용 이러한 문자열에 대한 모든 인코딩 문제 예를 들어 òàòààòòààèàòàòèàòèàòè이되며 ASCII가 아닌 문자가 포함되어 있지 않으므로 인코딩이 쉽습니다.

P. 어쨌든 이런 종류의 작업에는 preg_replace을 사용하지 마십시오. ASCII가 아닌 모든 문자를 정규식에 나열 할 수 없기 때문에 안전하지 않습니다 (또는 더 좋을 수도 있지만 오류가 발생하기 쉽습니다).

P.P.S. 여기에 a good document on utf-8 encoding 및 HTMLPurifier 웹 사이트에서 가져온 PHP에서 변환입니다.

관련 문제