0

我被一个问题难住了。似乎我尝试过的大多数技巧根本不起作用。问题概述如下:

  1. 创建表,排序规则设置为 utf8_unicode_ci。列也一样。

  2. 表单所在页面的字符编码为 UTF-8(在<meta>标签中)。表单设置为接受 UTF-8 ( <form action="execute.php" method="POST" accept-charset="utf-8">)字符集

  3. Execute.php 使用htmlspecialchars(@trim($str), ENT_QUOTES, "UTF-8");并运行mysql_real_escape_string($str);. 声明数据库连接应以 UTF-8 ( mysql_set_charset('utf-8');) 编码。将值插入数据库。如果我停止数据库插入并回显查询,我会得到正常的输出。

  4. 现在乐趣开始了。MySQL 行显示奇数字符,例如 ß 变成 ß。

  5. 如果我检索数据库数据并将其呈现在使用 UTF-8 编码的页面上,则字符看起来也很混乱(ß)。但是,当我将页面编码更改为西方 ISO 时,字符显示就好了 - ß。

我怀疑表单将数据提交到数据库时出现问题......但我无法确定到底哪里出了问题。

4

3 回答 3

3

一些东西

  1. 不要通过htmlspecialchars或任何卫生设施运行您发布的数据。验证输入,但如果有效则按原样存储。
  2. 如果需要,清理输出,例如使用htmlspecialchars.
  3. 确保仅对 UTF8 字符串使用二进制安全函数。您不太可能在现代 PHP 中遇到这种情况,但这是可能的。
  4. 停止使用已弃用的 mysql 库并切换到 mysqli (easy) 或 PDO。
  5. SET NAMES utf8在你用 mysqli 初始化你的数据库连接之后。
  6. Make sure your PHP file (or any used) are saved as UTF8.
  7. Set your response header to UTF8: header('Content-type: text/html; charset=utf-8'); You can do this from anywhere in your code if you're using output buffering.
  8. Add <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> to page <head>.
于 2012-10-02T17:41:48.983 回答
0

Did you try without the htmlspecialchars() ?

于 2012-10-02T17:42:52.520 回答
0

You need the character set of the database table and columns set to UTF-8 as well. Collation only deals with how data will be sorted/compared not how it is encoded.

于 2012-10-02T18:05:22.077 回答