對於我當前的項目,我想爲我在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"
任何想法可能什麼錯?謝謝!
確保所有的腳本(PHP腳本,HTML文件,並和其他一切)進行編碼UTF8。 – Bjoern
截至目前,我只是運行我在這裏發佈的內容。我是否適當地設置了編碼? – user1261711
你必須在你的文件中檢查這個。許多代碼編輯器(p.e. notepad ++)都有類似「convert to utf8」或類似的選項。 – Bjoern