2014-05-10 4 views
4

현지 언어로 정보를 제공하는 로컬 웹 사이트를 개발 중입니다. 내 MySQL 데이터베이스에는 pageContent라는 테이블이 있으며 "text"라는 열이 있습니다. 것을 "텍스트"열 유형은 텍스트이며, 정렬이PHP의 mysql 데이터베이스에서 유니 코드 문자를 가져 오는 방법

MySQL의에서

enter image description here

가 정상적으로 글꼴 표시 utf8_sinhala_ci입니다 :

enter image description here

을하지만 PHP 페이지에 걸릴 때 값을 반향하면 ??????????과 같은 물음표가 표시됩니다.

enter image description here

하지만 하드 코드 뭔가를하고 에코 있다면, 그것은 또한 PHP 페이지가 정상적으로 표시됩니다.

enter image description here

은 내가 데이터베이스에서 값을 취할 때 뭔가 잘못 생각합니다. 하지만 오류를 찾을 수 없습니다. 다음 코드도 시도해 보았습니다.

mysql_query ("set collation_connection='utf8_sinhala_ci'"); 
    $result = mysqli_query($this->connecDB,"SELECT * FROM pageContent"); 

하지만 작동하지 않습니다.

답변

3

은 내가 데이터베이스에서 값을 취할 때 뭔가 잘못 생각합니다. 그러나 오류를 찾을 수 없습니다. 나는 또한 다음 코드를 시도했다.

연결에서 데이터베이스, 테이블까지 전체 체인이 모두 UTF8 클린인지 확인해야합니다. a similar question here에 대한 자세한 답변이 있습니다.

그러나 귀하의 경우

은 실제 MySQL 서버 my.cnf 파일을 확인하십시오. 다음은 UTF-8로 전체 체인을 설정합니다 :

더 즉시
[client] 
default-character-set=utf8 

[mysql] 
default-character-set=utf8 

[mysqld] 
collation-server = utf8_unicode_ci 
init-connect='SET NAMES utf8' 
character-set-server = utf8 

, 당신의 코드를 보면 : 당신이 mysql_query를 호출하고 옆 mysqli_query을 요구하고있다

mysql_query("set collation_connection='utf8_sinhala_ci'"); 
$result = mysqli_query($this->connecDB,"SELECT * FROM pageContent"); 

라인 하나에. 그러나 이것들은 함께 사용되어서는 안되는 상충되는 방법입니다. 그것은 단순히과 같이 mysqli_query해야한다 :

mysqli_query($this->connecDB, "SET collation_connection='utf8_sinhala_ci'"); 
$result = mysqli_query($this->connecDB,"SELECT * FROM pageContent"); 

주 나는 당신의 SET collation_connection='utf8_sinhala_ci' 전에 mysqli_query($this->connecDB,…을 설정하고 방법에 대해 설명합니다. 그러면 $result에 대해 사용중인 동일한 연결에서 쿼리가 전송됩니다. 또는 아마도 이것을 시도해보십시오 :

+1

도움을 많이 주셔서 감사합니다. 이제 작동 중입니다 :) – tishantha

+0

사실, 유니 코드를 완벽하게 지원하려면 [utf8' 대신에'utf8mb4'] (http://mths.be/utf8mb4)를 사용해야합니다. –

1

PHP 파일 자체가 데이터베이스 (UTF8)와 동일한 인코딩을 사용하는지 확인하십시오. 그로 인해 내가 실수로 잘못을 저질렀습니다. 이 방법으로 문제가 해결되지 않으면

는 못생긴 솔루션은 utf8_decode()로 출력을 변환하는 것입니다.

+0

PHP & HTML은 "하지만 하드 코딩을하고 echo하면 정상적으로 PHP 페이지에도 표시됩니다."라고 표시되어 있습니다. 문제는 데이터베이스 연결 및 데이터 정렬입니다. – JakeGould

+1

좋아, 필자는 스크린 샷이 PHPMyAdmin에서 나온 것이므로 문제가 PHP 파일의 어딘가에 있어야한다고 생각했습니다. 어쨌든, 당신의 대답은 새로운 것들을 가르쳐 더 깊은 지식을 보여줍니다 :) – luttkens

0

제 경우에는 데이터 정렬을 utf8mb4_unicode_ci에서 mysql으로 변경하려고 시도했으며이를 uft8_general_ci으로 변경해야했습니다.

는 다음 붙여 넣기 : 나는 SELECT 명령을 한 직전

mysqli_set_charset($con, 'utf8'); 

합니다.

이는 DB에서 읽어 내 코드입니다 :

/* 

$DB_SERVER="db_server_name"; 
$DB_USER_READER="root"; 
$DB_PASS_READER="passw*rd"; 
$DB_NAME="db_name"; 
$DB_PORT="port number"; 

$SELECT_WHAT="`name_of_column_as_in_your_table`"; 
$WHICH_TBL="`table_name`"; 
$ON_WHAT_CONDITION="`id`='7'"; 

*/ 


$con = mysqli_connect($DB_SERVER, $DB_USER_READER, $DB_PASS_READER, $DB_NAME, $DB_PORT);//this is the unique connection for the selection 

    mysqli_set_charset($con, 'utf8'); 


     $slct_stmnt = "SELECT ".$SELECT_WHAT." FROM ".$WHICH_TBL." WHERE ".$ON_WHAT_CONDITION; 

    $slct_query = mysqli_query($con, $slct_stmnt); 

     if ($slct_query==true) { 
//Do your stuff here . . . 
} 

그리고 그것이 마치 마법처럼 일했다. 모두 제일 좋다. 위의 코드는 chineese, 러시아어 또는 아랍어 또는 해당 데이터가 들어있는 mysql 데이터베이스 테이블 열에서 모든 국제 언어를 읽을 수 있습니다.

관련 문제