2012-03-13 2 views
2

MySQL에서 필자는 문자열이 utf8_general_ci으로 설정된 데이터 정렬로 phpmyadmin에서 올바르게 표시됩니다. PHP 파일에서 PHP를 통해 MySQL에서 UTF-8 문자열을 가져옵니다. "????????"

, 나는 일반 HTML 사용하여 헤더를 설정 : <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

PHP는 파일

우분투, 아파치 2.2에서 호스팅되는, 그리고 파일이

(++ 메모장을 사용) UTF-8 without BOM에 저장됩니다

나는 UTF8 사용하도록 연결 설정 :

@mysql_query("set names 'utf8'", $this->link); 
$r = @mysql_query($query, $this->link); 

는 문자열 (VARCHAR 255) 반환을 우리 PHP 반향, 그것은 브라우저에 표시됩니다.

그러나 나는 아직도 ??? 실제 단어 대신.

제가 놓친 부분을 검색 할 수없는 것처럼 보일 수 있습니다. 도움을 많이 받으실 수 있습니다.

===== 편집 =====

데이터베이스, 테이블 및 열 세 가지 정렬을 할 수 있습니다, 나는 그들 모두가 utf8_general_ci로 설정했으며, mysql_set_charset 호출 ('UTF-8') 즉시 연결 후 내 문제를 해결했습니다.

나는 이것이 동일한 문제에 부딪 치는 미래의 사람들을위한 유용한 체크리스트로 작용하기를 바랍니다. 나는 무엇을 놓쳤는지를 확인하기 위해 몇 개월 만에 아주 잘 돌아갈 수 있습니다. :)

감사합니다.

+0

제대로 저장 되었습니까? –

+0

UTF-8 파이프 라인을 사용하여 데이터를 삽입 했습니까?출력 파이프 라인이 올바르게 utf8이라도 데이터베이스 삽입 전/삽입 중에 데이터가 손상되었을 수 있습니다. –

+0

다른 텍스트 (데이터베이스가 아닌)가 정확합니까? 아니면 물음표가 있습니까? –

답변

2

테이블이 utf8_general_ci인지 확인하십시오. 데이터베이스와 테이블이 다른 문자 세트 을 가질 수 있습니다 (직접 변경할 때 발생할 수 있음).

그리고 < 5.4.0

(세트 UTF-8 PHP> 5.4.0에에) PHP를 위해 ISO-8859-1로 설정된 디폴트의 캐릭터 세트 매개 변수가를 htmlentities 같은 일부 기능, 조심 쿼리하기 전에이 같은

http://php.net/manual/en/function.htmlentities.php

+0

틀릴 수도 있지만, PHP 5.3이 기본 charset 매개 변수를 UTF-8로 업데이트했다고 생각합니다. –

+0

다음은 PHP doc의 유용한 부분입니다.'htmlspecialchars()와 마찬가지로 htmlentities()는 변환에 사용되는 인코딩을 정의하는 선택적인 세 번째 인수 인코딩을 사용합니다. 생략하면이 인수의 기본값은 5.4.0 이전의 PHP에서는 ISO-8859-1이고, 이후에는 5.4.0 이후의 UTF-8입니다. 이 인수는 기술적으로 선택 사항이지만 코드에 올바른 값을 지정하는 것이 좋습니다. – zessx

+0

고마워요. 나는 Database, Table, Column이 ** 3 가지 다른 조합을 가질 수 있다는 사실을 알지 못했다 **. 나는 utf8_general_ci를 모두 설정하고 @jeroen이 제안한대로 올바른 charset을 설정하는 것이 문제를 해결했습니다. – Gapton

2

나는 'utf8' 주위에 따옴표가 잘못 생각하지만 어느 쪽이든, 당신은 사용할 수 있습니다

mysql_set_charset('utf8'); 

그리고 당신이 그들을 찾고있는 @ 연산자 오류를 억제하는 것은 좋은 생각이 아니다.

-1

확인 뭔가

mysql_query('SET character_set_results=utf8'); 
mysql_query('SET names=utf8'); 
mysql_query('SET character_set_client=utf8'); 
mysql_query('SET character_set_connection=utf8'); 
mysql_query('SET character_set_results=utf8'); 
mysql_query('SET collation_connection=utf8_general_ci'); 
+0

이것은 길 과잉입니다. 이름만으로 충분하다. –

-1
당신이 UTF-8 그래서 ???받지 않습니다에 대한 문자열을 인코딩하기 위해 사용할 수 있지만 비 변경됩니다

urf-8 문자는/u003과 같습니다. 나중에 디코드하여 텍스트에 표시 할 수 있습니다.

while($var=mysql_fetch_assoc($r)){ 
      $e['columnI']=utf8_encode($e['columnI']); 
관련 문제