【问题标题】:Strange characters from PHP form. Character set?PHP 形式的奇怪字符。字符集?
【发布时间】:2011-03-31 00:14:50
【问题描述】:

我的网站上有一个表单,用户可以在其中提交文本作为产品评论的一部分。审核进入 MySQL 数据库,我可以在批准之前对其进行审核,以便它出现在我的网站上。我今天收到了一篇充满奇怪字符的评论。例如,我认为下面的内容应该是“有趣”的,但它在我的 MySQL 数据库中显示为:

“funâ€Â

我很确定这是一个字符编码问题,我在 stackoverflow 上阅读了一些关于此类问题的条目,但我只是不确定如何实施修复。我猜我需要更改用于从表单中进行数据清理的 php 函数,如下所示:

function cleanDataForDB($data) {
$data = trim(htmlentities(strip_tags(nl2br($data),'<br><br />')));

if (get_magic_quotes_gpc())
    $data = stripslashes($data);

$data = mysql_real_escape_string($data);

return $data;

}

我网站的 html 以 UTF-8 编码。我在每一页的顶部都有这个标签:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

在浏览器中显示时是否需要使用 php 编码函数,例如数据输入时使用 utf8_encode() 和 utf8_decode()?

非常感谢任何帮助。谢谢!

克里斯

【问题讨论】:

  • 你做nl2br() 然后用strip_tags() 剥离它们?
  • 您使用的是什么数据库驱动程序(mysqli、pdo 等)?有时在首次连接数据库时指定字符编码会有所帮助。
  • Alex - 这是矛盾的吗?我只知道它适用于换行。
  • Greg - 我不知道,我得调查一下。我只知道我正在使用 MySQL,当我进入 phpmyadmin 时,它说字符集是 UTF-8。

标签: php character-encoding


【解决方案1】:

确保网络服务器宣传 UTF-8 也很好,但这不是罪魁祸首。我在 Firefox 中使用 Live HTTP Headers 扩展进行测试。 MySQL 始终默认为 latin-1 字符集,您必须使用 mysql_set_charset() 明确设置它。 PHP 本身不太擅长像 UTF-8 这样的多字节字符集,但只要它不需要理解那些字符(例如正则表达式匹配)就安全了。您只需要确保用户(通过元标记)和数据库的所有输入和输出都知道字符编码。

【讨论】:

  • 所以你的意思是只要我在将用户输入插入我的 MySQL 数据库的脚本中连接到我的数据库后指定mysql_set_charset('utf8');,我不应该遇到这个问题吗?当我在我的网站上输出数据时,这也有必要吗?谢谢。
  • 任何与 MySQL 的连接传输字符数据都需要定义字符集。如果在读取和写入之间设置不同,您将读取与写入不同的数据。 ASCII 字符在大多数字符集中都是相同的,通常不会有问题,但其他字符很可能会有所不同。
  • 谢谢,企鹅。我会试试这个。
  • 这是一个更深入的博客:helloandroid.com/tutorials/…
猜你喜欢
  • 2010-09-05
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多