2011-01-25 7 views
0

아랍어 데이터가있는 페이지 테이블에 열이 있습니다. 이상한 MySQL 인코딩 문제

내가 이렇게하면

...

@mysql_query("select title from pages where web_id = '$id'"); 

나는 아랍어, 정확한 데이터를 얻을.

그러나 실제로 같은 함수를 다시 호출하면 사실 루프에 있고 두 번째로 가비지 데이터를 가져옵니다. 또한이

"تنظيم الأوقا٠العامة اقرأ قطاع 

처럼 보이는 뭔가, 그 쿼리하기 전에,이 중 하나를 수행 할 경우 :

@mysql_query("SET NAMES 'utf8'"); 
@mysql_set_charset('utf8'); 
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"); 

난 항상 심지어 최초의 호출시에 쓰레기 데이터를 얻을. 여기 무슨 일 이니? 데이터베이스, 테이블 및 필드 데이터 정렬이

답변

1

일부 무작위 힌트를 예컨대을 보장하기 위해 필요한 것 :

@ 연산자를 사용하지보십시오. 오류 메시지는 표시되지 않습니다.

당신은 제대로 입력 매개 변수를 탈출해야합니다

mysql_query("SELECT title FROM pages WHERE web_id = '" . mysql_real_escape_string($id) . "'"); 

당신은 mysql_query()의 반환 값을 확인해야합니다

$res = mysql_query("SELECT title FROM pages WHERE web_id = '" . mysql_real_escape_string($id) . "'"); 
if(!$res){ 
    die('Could not fetch page title'); // See mysql_error() for error message 
} 

당신의 PHP 소스 코드 UTF-8로 저장되어 있는지 확인합니다. 적절한 편집기를 사용하면 UTF-8로 저장하고 상태 표시 줄에 현재 인코딩을 표시 할 수 있습니다.

테이블 정의를 확인하십시오. MySQL은 테이블과 컬럼 인코딩을 설정할 수있다.

connetion encoding을 mysql_set_charset()으로 설정하십시오.

브라우저에서 페이지를 UTF-8로 렌더링해야합니다. PHP에서는

header('Content-Type: text/html; charset=utf-8'); 
+0

ID가 이미 이스케이프되고있는 상태에서 적절한 HTTP 헤더를 생성 할 수 있습니다. 반환 값이 있습니다. PHP 코드가 utf-8로 저장됩니다. 페이지는 utf-8 인코딩으로 표시됩니다. 그리고 이미 언급했듯이, 나는 mysql_set_charset()을 시도했다. – HyderA

0

당신은 당신의 분야 실제로 UTF-8 데이터가 포함되어 있는지 여부를 확인해야합니다 utf8_bin하도록 설정되어 있는지

참고. UTF-8로 설정되어 있어도 데이터를 잘못 가져 왔거나 데이터가 손상되었을 수 있습니다. 다음을 사용하여 특정 바이트 스트림을 볼 수 있습니다 :

SELECT hex(myfield) FROM mytable; 

데이터를 가져온 경우 데이터 파일은 다른 인코딩으로 해석되었을 수 있음을 유의하십시오 - 사실조차 할되었을 수 있습니다. 당신은 : 파일이 제대로 인식되는지

mysql --default-character-set=utf8 database < mydbbackup.sql