2012-04-02 70 views
0

我正在使用PDO在PHP中執行查詢。問題是通過phpMyAdmin添加帶有口音的字符(「é」,「è」,「ô」等),並用PHP檢索它時,顯示出奇怪的字符。當重音通過查詢添加時,它被存儲爲一個奇怪的字符('é'將是'Ã'),但它顯示正確。口音「é,è... etc」顯示不正確

我在MySQL中使用的字符集是utf8_general_ci。我的PHP字符集設置爲UTF-8(不含BOM)。當我執行類似的查詢:

SELECT ... WHERE DataName LIKE '%é%' ... 

如果數據已經通過phpMyAdmin的補充,而不是設置爲「A©」這是行不通的。

即使我們通過phpMyAdmin添加數據並在phpMyAdmin中顯示爲「é」,我也想知道如何使其工作。

+0

你的服務器是在他的HTTP頭回什麼編碼? – 2012-04-02 12:53:55

+0

另外,你是否嘗試過使用'utf8_decode()'/'utf_encode()'來玩? – 2012-04-02 12:54:48

+0

我不知道在標題中的編碼,但我的HTML頁面設置爲UTF-8(在元)。但即使我做了查詢(在我的PHP腳本,所以在服務器上,沒有發送給用戶的頭),問題是一樣的。我必須將'É'與'E'進行比較才能使其正常工作。所以我不認爲這個問題與標題有關(或只與標題相關)。 – maniak 2012-04-02 13:17:28

回答

0

確保您的PDO和MySQL

$handle = new PDO("mysql:host=localhost;dbname=dbname", 
    'username', 'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 
+0

它向我顯示一個錯誤:未定義的類常量「MYSQL_ATTR_INIT_COMMAND」。我已經研究過這個,解決方法是在'dbname'之後設置'; charset = UTF-8'。但即使charset = UTF-8也沒有解決我的問題。 – maniak 2012-04-02 13:12:33

0

我有同樣的問題之間的所有通信建立UTF8。我的批處理文件初始化了輸入帶有口音的表格,但是我的phpmyadmin顯示了一個奇怪的數字。但是,當我在phpmyadmin中更改它時,它被正確保存,並且當我導出到批處理時也是正確的(加載奇怪圖形的同一批處理) 我喜歡使用Jedit編輯器代替記事本的問題。出於某種原因,記事本會將奇怪的數字轉換爲重音。 知道這個問題的解決方案很容易:
1-使用latin1創建數據庫:
DROP DATABASE IF EXISTS mydb;
CREATE DATABASE mydb DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
2-批處理文件經過輸入正確的口音
3-用在HTML頭的常規聲明:META字符集=「utf-8」