导致MySQL失败的特殊字符

问题描述:

对于我当前的项目,我想为我在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

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

在你的PHP脚本,使它UTF8

+0

我试过这个,但无济于事。我认为我已经在每个可能的时刻添加了UTF8编码,但它仍然行事不端。 – user1261711

+0

我不知道为什么,但它似乎现在正常工作。 o.O – user1261711

+0

这听起来很棒;) – Tredged