2010-07-17 2 views
2

과 같은 특수 문자가 망가집니다. 웹 서버에서 .sql 파일 (서버에 직접 저장 됨)을 구문 분석하고 실행하는 PHP 스크립트가 있습니다. mysql 데이터베이스에 대한 쿼리. 나는 잘 들어 가지 않는 많은 프랑스어 문자를 가지고있다 : é는 à©가된다.PHP - uft-8 파일을 구문 분석하여 데이터베이스에 삽입하면 ¹

메모장 ++에서 sql 파일을 열면 인코딩이 "BOM없이 uft-8"이라는 것을 알 수 있습니다.

내 스크립트는 다음과 같습니다 : 나는 phpMyAdmin을 통해 데이터베이스를 열 때

$handle = fopen("test.sql", "r") or die("couldn't get handle"); 
if ($handle) 
{ 
    while (!feof($handle)) 
    { 
     $buffer = fgets($handle, 4096); 
     if (strlen ($buffer) < 3) // if we have a blank line 
     {  
      mysql_query($query); 
      $query = $buffer; 
      sleep(0.5); 
     } 
     else 
     { 
      $query .= $buffer; 
     } 
    } 
    mysql_query($query); // last insert 
    fclose($handle); 
} 

, 나는 특수 문자가 이미 바로 스크립트의 실행 후 깨진 것을 알 수있다.

답변

3

삽입을하기 전에 'SET NAMES UTF8'을 실행해야합니다. mysql이 문자 인코딩에 대해 매우 희한하기 때문입니다. 예, 전체 데이터베이스가 UTF-8 문자 인코딩 및 일반 utf8-ci 데이터 정렬을 사용하도록 이미 설정된 경우에도 가능합니다.

http://forums.mysql.com/read.php?103,46870,46870#msg-46870

+0

와우 감사합니다. 완벽하게 작동했습니다. – Phillaf

1

는 대신에, 당신은 mysql_set_charset 기능이 아닌 집합 이름 쿼리를 사용한다 http://www.php.net/manual/en/function.mysql-set-charset.php 데이터베이스가 UTF-8 UTF-8 및 PHP 거래에 비록

에서 설명 된 바와 같이, 기본적으로 연결 설정은 Latin-1 연결이므로 MySQL은 데이터를 변환하지 않으려 고합니다.

+0

니스! 노트 : "참고 : 이것은 charset을 변경하는 가장 좋은 방법입니다 .SET NAMES를 실행하기 위해 mysql_query()를 사용하는 것은 권장되지 않습니다." 현재로서는 최근 버전이 충분하지 않습니다. mysql의,하지만 난 확실히 그것을 업데이 트로 기억 해요. 감사합니다. – Phillaf

관련 문제