2011-02-26 9 views
40

내 페이지는 보통 일반 문자 대신에«, Ã, Ã, ¬, ù, à 같은 것을 보여줍니다.이 이상한 문자를 변환하는 방법?

헤더 페이지와 MySQL 인코딩에 utf8을 사용합니다. 어떻게 될까요?

+0

더 많은 컨텍스트를 추가해야합니다. 이 문자들은 어디서 나타나고, 어떤 인코딩이 테이블에 있으며, 데이터를 검색하는 코드는 무엇입니까? ... –

+8

이들은 Latin-1 charset 웹 사이트에 표시 될 때 UTF-8 시퀀스입니다. 가장 좋은 방법은 귀하의 페이지에''을 추가하거나 PHP 상단에'header ("Content-Type : text/html; charset = utf-8"); 스크립트. 나는 이것이 사실은 아직 사건이 아니라고 생각한다. – mario

답변

46

이들은 utf-8로 인코딩 된 문자입니다. utf8_decode()을 사용하여 일반 ISO-8859-1 문자로 변환하십시오.

+4

이 문제는 당면의 문제를 해결하기 위해 발생할 수 있지만 처음에는 프로세스의 모든 인코딩을 가져 오는 것이 훨씬 낫습니다. –

+1

데이터베이스에 문자열을 보낼 때 항상 utf8_encode() (그리고 mysql_real_escape_string)를 사용합니다. 출력 페이지에서 utf8_decode()를 사용하십시오. 하지만 그게 잘못이라고, 나도 몰랐어. 어떻게이 문제를 해결 하겠니? – Ray

+4

utf8_encode() 및 utf8_decode는 ISO 8859-1에서 데이터를 변환합니다. 데이터베이스, 데이터베이스 연결 및 출력 페이지 인코딩이 UTF-8 인 최신 웹 사이트 설치에서는 더 이상 이러한 변환을 수행 할 필요가 없습니다. 그것은 처음부터 PHP 프로젝트를 빌드 할 때 권장되는 방법입니다. 아마도 OP가 보여주는 문제를 해결할 수 있지만 가능한 경우 루트에 문제를 수정하는 것이 훨씬 바람직합니다. –

24

해당 문자가 표시되는 경우 아마도 specify the character encoding properly이 아닙니다. 이러한 문자는 UTF-8 멀티 바이트 문자열이 ISO 8859-1 또는 Windows-1252과 같은 싱글 바이트 인코딩으로 해석 될 때의 결과입니다.

이 경우 ë은 UTF-8로 유니 코드 문자 ë (U + 00EB)을 나타내는 0xC3 0xAB로 인코딩 될 수 있습니다.

+0

UTF-8에서 유니 코드 문자 ë (U + 00EB)를 나타내는 0xC3 0xAB로 인코딩 된 방법 ?? – Leonardo

+2

문자 'ë'는 유니 코드 문자 세트의 코드 포인트 0xEB를 가지며 UTF-8로 0xC3AB로 인코딩됩니다. 그러나이 바이트 시퀀스는 다른 문자 인코딩으로 해석 될 때 다른 것을 나타냅니다. 예를 들어, ISO 8859-1 및 Windows-1252에서는'á' (0xC3) 및'''(0xAB)의 두 문자를 나타냅니다. – Gumbo

8

utf8_decode이 유용한 솔루션이지만 테이블 자체에서 인코딩 오류를 수정하는 것이 좋습니다. 제 의견으로는 코드에서 "해킹"을 만드는 것보다 나쁜 문자를 수정하는 것이 더 낫습니다. 테이블의 필드에 replace을 입력하기 만하면됩니다. OP에서 나쁜 인코딩 된 문자를 수정하려면 :

update <table> set <field> = replace(<field>, "ë", "ë") 
update <table> set <field> = replace(<field>, "Ã", "à") 
update <table> set <field> = replace(<field>, "ì", "ì") 
update <table> set <field> = replace(<field>, "ù", "ù") 
<table>는 MySQL의 테이블의 이름입니다

<field>이 테이블의 열 이름입니다. 다음은 일반적으로 잘못된 인코딩 된 윈도우 (1252에서 utf-8 문자)의 확인 목록입니다 (Debugging Chart Mapping Windows-1252 Characters to UTF-8 Bytes to Latin-1 Characters).

문자를 SQL으로 바꾸려면 먼저 테이블을 백업해야합니다!

[]이 질문은 아주 오래된 질문에 대한 답변이지만 다시 한번 문제에 직면했습니다. 일부 오래된 Windows 컴퓨터는 utf8_general_ci 조합 테이블에 텍스트를 삽입하기 전에 텍스트를 올바르게 인코딩하지 않았습니다.]

+0

왜 지구상에 이것은 downvoted입니까?Downvoters : 귀하의 불만을 설명해주십시오 ... – davidkonrad