2016-11-05 116 views
0

我有幾個輸入MySQL數據庫的文本文件。這些文本文件包含像é和ë這樣的字符。我一直在努力將數據正確地存入數據庫,現在看來我終於明白了。但是,我想知道是否有更好的方式來做到這一點,而不是我在這裏描述的方式。使用MySQL/PHP進行urlencoding的問題

  1. 該文本文件都是UTF-8編碼的。
  2. PHP腳本也都是UTF-8編碼。我讀過這個非常重要。
  3. 所有HTML輸出使用這樣的插頭來實現:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. MySQL數據庫使用latin1_swedish_ci的校對中創建(字符集留空)
  5. 所有包含字符(VARCHAR)的列被定義使用拉丁語的排序規則1:瑞典_ci

我假設存儲url編碼字符串的正確方法是當我在數據庫中看到存儲爲%C3%A9的字符時。我發現了urlencoding的一個MySQL函數here。 但是,當我打開phpMyAdmin,我看到字符é被呈現爲%C3%A3%C2%A9。

我可以添加另一個語句來替換數據庫中的字符,但有些東西告訴我有一個更有效的方法來實現這一點。

任何幫助,非常感謝。提前致謝。

+0

您應該使用'urlencode'和'urldecode'來生成鏈接,而不是數據存儲。更新你的數據庫以使用UTF8。 – chris85

+0

[UTF-8一路通過]可能的重複(http://stackoverflow.com/questions/279170/utf-8-all-the-way-through) – chris85

+0

您可以將源代碼添加到您閱讀源文本文件,轉換(urlencode)和插入的SQL?我會說在mysql中使用'ascii_bin'作爲字符集整理,但我可能是錯誤的 –

回答

0

的是從你的5件事名單缺少的是

  • 我告訴MySQL客戶端字節是UTF8編碼。我通過$mysqli_obj->set_charset('utf8');new PDO('dblib:host=host;dbname=db;charset=UTF8', $user, $pwd);SET NAMES utf8來做到這一點。 (或utf8mb4)。
  • 客戶端看到utf8,表看到latin1;轉換將發生在INSERTingSELECTing,但它需要#6知道這樣做。

    +0

    請注意,'é'和'ë'在latin1中都可用。 –

    +0

    我終於搞定了這一切。原來,我在HTML文件中使用了錯誤的字符集。感謝您的輸入! – Raoul