2016-11-05 122 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