2013-02-13 1 views
0

UTF8 문자 집합에있는 문자를 검색하는 것과 관련하여 Drupal 6에서 매우 이상한 문제가 있습니다. 흥미롭게도 데이터를 올바르게 검색하는 데 문제가있는 것은 drupal API 인 것 같습니다. 내가 직접 mysqli와 명령 행을 사용하여 데이터를 얻었을 때 모든 것이 괜찮은 것 같다. 아래 그림과 같이Drupal 6 db_query 문제 utf8 문자를 가져 오는 중

데이터베이스 및 테이블은 올바른 문자 집합 및 데이터 정렬로 설정됩니다

mysql> show variables like "collation_%"; 
+----------------------+-----------------+ 
| Variable_name  | Value   | 
+----------------------+-----------------+ 
| collation_connection | utf8_general_ci | 
| collation_database | utf8_unicode_ci | 
| collation_server  | utf8_unicode_ci | 
+----------------------+-----------------+ 
3 rows in set (0.00 sec) 

mysql> show variables like "char_%"; 
+--------------------------+----------------------------+ 
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | utf8      | 
| character_set_connection | utf8      | 
| character_set_database | utf8      | 
| character_set_filesystem | binary      | 
| character_set_results | utf8      | 
| character_set_server  | utf8      | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 
8 rows in set (0.00 sec) 

내가 명령 줄에서 데이터를 검색

이 모든 것이 확인 될 것으로 보인다. 내 사용자 지정 드루팔 모듈 중 하나에서
mysql> select id, name from web_gfo_article_type; 
    | 294 | ДОСЛОВНО              | 
    | 295 | EXAMEN              | 
    | 296 | REVISIÓN              | 

는 mysqli를 사용하여, 드루팔 API (db_query)를 사용하여 동일한 데이터를 검색하고 직접 접근 방식을 사용하고 있습니다.

직접 접근 : 드루팔 DB API 호출의

$r = db_query("select id, name from web_gfo_article_type"); 

while ($row = db_fetch_object($r)) { 
    print('<br/>' . $row->id . ' ' . $row->name); 
} 

결과 :

294 ДОСЛОВÐО 
295 EXAMEN 
296 REVISIÓN 
012,351

294 ДОСЛОВНО 
295 EXAMEN 
296 REVISIÓN 

드루팔 DB API를 사용하여 : 직접 접근 방식의

$mysqli = new mysqli("localhost", "my_db_user_name", "my_db_password", "my_db_name"); 
$r = $mysqli->query("select id, name from web_gfo_article_type"); 

while ($row = $r->fetch_object()) { 
    print('<br/>' . $row->id . ' ' . $row->name); 
} 

결과

drupal db API가 데이터를 검색하는 방법에 심각한 문제가있어 UTF 데이터가 표시 될 때 UTF 데이터가 뭉치 게됩니다. 메타 헤더 정보가 정확하게 누군가가 발생 될 수있는 것과 같이 올바른 방향으로 날 지점 수

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

즉 설정되어 잘못 뭐하는 거지 어디 위의 모든 결과는 HTML 페이지에 표시되고있다. 매우 감사.

+0

'settings.php' 파일은 어떻게 구성되어 있습니까? '$ db_url' 변수가 있는데 어떻게 생겼습니까? 물론 형식에 관심이있는 자격 증명은 필요하지 않습니다. 이건'$ db_url = 'mysqli : // username : password @ localhost/databasename';'입니까? – Max

+0

최대 - 네, db url은 다음과 같이 지정했습니다 : $ db_url = 'mysqli : // mydbusername : mydbpassword @ localhost/mydbname'; – mackelkin

+0

이 경우 Drupal 함수 ('db_query','db_fetch_object')는 PHP의 mysqli 함수를 감싸는 래퍼 일 뿐이 기 때문에 이상합니다. 그리고 그것들은 올바른 결과를 리턴하는 것 같습니다 ... – Max

답변

0

쿼리를 작성한 .module-file (?)이 utf-8을 사용하고 있는지 확인하십시오.

관련 문제