2013-07-04 81 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/>"; 
     } 
    } 
?> 

如果我輸入 「人」 在搜索框中,適當的數據被拉起。但是,如果我搜索「mard」,我就沒有結果。但是,如果我在MySQL Workbench中嘗試相同的查詢,我會得到正確的輸出。我有腳本打印出它使用的查詢,並且它匹配應該是。

TL; DR:下面的查詢運行在MySQL Workbench中的文件,而不是當我把它稱爲我的HTML頁面上通過一個PHP腳本 -

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

任何想法可能什麼錯?謝謝!

+0

確保所有的腳本(PHP腳本,HTML文件,並和其他一切)進行編碼UTF8。 – Bjoern

+0

截至目前,我只是運行我在這裏發佈的內容。我是否適當地設置了編碼? – user1261711

+0

你必須在你的文件中檢查這個。許多代碼編輯器(p.e. notepad ++)都有類似「convert to utf8」或類似的選項。 – Bjoern

回答

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

在你的PHP腳本,使它UTF8

+0

我試過這個,但無濟於事。我認爲我已經在每個可能的時刻添加了UTF8編碼,但它仍然行事不端。 – user1261711

+0

我不知道爲什麼,但它似乎現在正常工作。 o.O – user1261711

+0

這聽起來很棒;) – Tredged