2013-07-04 2 views
2

현재 프로젝트에서는 MySQL에있는 사전 데이터베이스 용 브라우저를 만들고 싶습니다. 이 단어에는 특수 문자가 포함되어 있으며 UTF-8 인코딩을 사용하고 있습니다. 지금까지 사용자의 입력을 조회하고 관련 정보를 출력하는 작동하는 "검색"을 만들었습니다.MySQL 오류를 일으키는 특수 문자

여기 내가 문제를 다루는 곳입니다. 사용자가 모든 일반 문자를 입력하면 코드가 제대로 작동합니다. 그러나 특수 문자가 포함 된 값을 입력하면 쿼리는 항상 null을 반환합니다.

HTML 페이지 :

<html> 
    <body> 
     <form action="test.php" method="get"> 
      Search dictionary: <input type="text" name="search"> 
      <input type="submit" value="Submit"> 
     </form> 
    <br> 
    </body> 
</html> 

PHP 스크립트 (발췌) :

<?php 
    $q=$_GET['search']; 
    $id = ""; 
    if (strlen($q) > 0) { 
     // connects to DB 
     $db = new PDO('mysql:host=localhost;dbname=***', '***', '***'); 
     $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'"); 

     $query="SELECT DISTINCT e.lexeme_id, l.posc 
     FROM entry e 
     INNER JOIN lexeme l 
     USING (lexeme_id) 
     WHERE e.lemma = '".$q."'"; 

     $stmt=$db->prepare($query); 
     $stmt->execute(); 

     foreach ($stmt as $row) { 
      $id = $row['lexeme_id']; 
      $posc = $row['posc']; 
      //output results here 
      echo "<h1>".$q."</h1><br/>"; 
      echo "<h2>".$posc."</h2><br/>"; 
     } 
    } 
?> 

하면 검색 창에 내가 입력 "사람", 적절한 데이터

다음은 관련 코드입니다 당겨 요. 그러나 "maðr"을 검색하면 결과가 없습니다. 그러나 MySQL Workbench에서 동일한 쿼리를 시도하면 정확한 결과를 얻을 수 있습니다. 나는 스크립트가 사용하는 쿼리를 출력하고 그것이 무엇이되어야 하는지를 일치시켰다.

TL; DR : 다음 쿼리는 MySQL의 워크 벤치에서 파일을 실행하지만, 내가 잘못 갈 수 무슨 PHP는 스크립트

SELECT DISTINCT e.lemma 
FROM entry e 
INNER JOIN lexeme l 
USING (lexeme_id) 
WHERE e.lexeme_id = "maðr" 

어떤 생각을 통해 내 HTML 페이지를 호출 할 때? 감사! 당신의 PHP 스크립트에서

+0

가 UTF8 인코딩되는 모든 스크립트 (PHP 스크립트, HTML 파일 및 다른 모든 것들) 확인 UTF8 확인합니다. – Bjoern

+0

지금 당장은 여기에 게시 한 내용을 실행하고 있습니다. 인코딩을 적절하게 설정 했습니까? – user1261711

+0

파일에서이 내용을 확인해야합니다. 많은 코드 편집기 (예 : notepad ++)에는 "utf8로 변환"또는 이와 유사한 옵션이 있습니다. – Bjoern

답변

0
header('Content-type: text/plain; charset=utf-8'); 

+0

나는 이것을 시도했지만 아무 소용이 없다. 모든 가능한 시점에서 UTF8 인코딩을 추가했다고 생각하지만, 여전히 오작동입니다. – user1261711

+0

이유는 모르겠지만 지금은 제대로 작동하고있는 것 같습니다. o.O – user1261711

+0

듣기 좋은 곳입니다.) – Tredged