2011-04-25 2 views
1

안녕하세요. 데이터베이스의 텍스트와 텍스트를 비교하려고합니다. 액센트가있는 텍스트는 html로 인코딩되었습니다 (예 : & eacute;) 내 문자열이 é를 보여주기 때문에 내 문자열에 데이터베이스 텍스트가 일치하지 않습니다. PHP 함수 htmlentities를 사용하여 문자열을 먼저 인코딩하면 é이 & Atilde가됩니다. © 이상한가? htmlspecialchars를 사용하면 é을 모두 인코딩 할 수 없습니다.PHP가 액센트가있는 외국 문자를 변환합니다.

é을 & eacute; 다른 악센트 부호가있는 문자는 물론?

답변

11

htmlentities에 올바른 문자 세트를 보내야합니다. UTF-8을 사용하고있는 것처럼 보이지만 기본값은 ISO-8859-1입니다.

$encoded = htmlentities($text, ENT_COMPAT, 'UTF-8'); 

또 다른 해결책은 인코딩 전에 ISO-8859-1로 텍스트를 변환하는 것입니다,하지만 그건 (ISO-8859-1이 UTF-8로 거의 많은 문자를 포함하지 않는 정보를 파괴 할 수 있습니다 이런 식으로 변경). 그 대신 시도 할 경우, 다음과 같이 수행

$encoded = htmlentities(utf8_decode($text)); 
+0

감사합니다. UTF-8로 charset을 바꾸면 .. 한가지 질문을합니다. ENT_COMPAT을 설정하지 않고 UTF-8을 설정하는 방법이 있습니다 –

+2

@Devin,'ENT_COMPAT'는'htmlentities' 두 번째 인수의 기본값입니다.기술적으로 null로 설정하거나 [htmlentities] (http://us.php.net/manual/en/function.htmlentity.php) 페이지 –

+1

에 다른 세 값 중 하나로 설정할 수 있습니다. 인터넷 검색 및 다양한 것들을 테스트하는 3 시간이 페이지를 발견, 당신은 하나님 :) – Sunny

1

비교 작업이 캐릭터 세트와 데이터베이스 또는 테이블을 만들 때 선택한 정렬 관련이있다. 스페인어와 같은 악센트가 많은 문자열을 저장하는 경우 charset uft8을 사용하는 것이 좋으며 데이터 정렬은 사용하는 언어 (영어, 프랑스어 또는 기타)에 더 정확할 수 있습니다.

데이터베이스에서 올바른 문자 집합을 사용하는 가장 좋은 방법은 문자열을 자연스럽게 저장할 수 있다는 것입니다. 예를 들어 내 이름을 'Mario Juárez'로 저장할 수 있으며 이상한 전환을 수행 할 필요가 없습니다.

5

나는 프랑스 사이트에서 일하고 있으며 같은 문제가있었습니다. 이것은 내가 사용하는 기능입니다.

function convert_accent($string) 
{ 
    return htmlspecialchars_decode(htmlentities(utf8_decode($string))); 
} 

문자열을 utf8로 디코딩하면 모든 HTML 항목이 변환됩니다. 짝수 태그. 하지만 htmlspecialchars_decode가 태그를 다시 변환하는 것보다 태그를 정상으로 되돌리고 싶습니다. 그래서 결국에는 태그를 건드리지 않고 변환 된 악센트로 문자열을 얻을 것입니다. 수신자에게 전자 메일 내용을 보내기 전에이 기능을 통해 전달할 수 있습니다.

또 다른 문제는 데이터베이스에서 가져온 콘텐츠가이 기능을 사용하여 때때로? . 이 경우 당신이 당신의 쿼리를 실행하기 전에이 작업을 수행해야합니다

mysql_query("SET NAMES `utf8`"); 

을하지만, 당신이 그것을 할 필요가 있습니다, 그것은 당신의 테이블에 인코딩에 따라 달라집니다. 나는 그것이 도움이되기를 바랍니다.

+0

난 그냥 추가 : mysql_query ("SET NAMES'utf8'"); 그리고 그것은 완벽하게 작동했습니다! 감사 – user2828251

1

를 사용하여 간단하게 불어로 노르웨이 문자를 작동합니다

function convert_accent($string) 
{ 
    return htmlspecialchars(utf8_decode($string)); 
} 
2

최근에 비슷한 문제로 달렸다. Emil의 답을 따라 가며 로컬에서는 잘 작동하지만 dev/stage 환경에서는 정상적으로 작동하지 않습니다. 나는 이것을 사용하여 끝내었고 주위에 모두 작동했습니다 :

$title = html_entity_decode(utf8_decode($item)); 

올바른 방향으로 나를 이끌어 주셔서 감사합니다!