如何摆脱utf-8中无法识别的角色? MySQL的/ PHP

时间:2010-12-06 03:45:58

标签: php mysql utf-8 character-encoding

我有一个设置为utf-8的mysql数据库。 我已将我的php标头设置为:header("Content-Type: text/html; charset=utf-8"); 在我的HTML中:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

当我返回任何带圆括号或撇号的东西时,它们会显示为无法识别的字符(黑色菱形带有?内部)。

如果我在回显的字符串上运行utf8_encode(),它在Chrome中看起来很好,但在Firefox中显示了一个不同的奇怪字符。我可以在网站范围内做些什么来使这项工作更好吗?

(我用sequel pro和phpmyadmin访问了数据库)

4 个答案:

答案 0 :(得分:3)

完整的utf-8设置:

1) .htaccess

AddDefaultCharset utf-8
PHP_VALUE default_charset utf-8

2)在php中的 mysqli_connect()之后调用:

mysqli_query($this->link, 'SET character_set_client="utf8",character_set_connection="utf8",character_set_results="utf8"; ');

3)你的数据库应该用“collat​​ion:utf8”charset创建;表中的所有字段也应该是“collat​​ion:utf8”

4)您的PHP文件也应该使用utf8 charset

创建

答案 1 :(得分:1)

确保通信方法是UTF-8。否则,它将被转换。

请参阅mysql_client_encodingmysql_set_charset

答案 2 :(得分:1)

你尝试过使用htmlentities吗? 我知道这不会影响字符编码, 但它可能会摆脱带问号的黑色方块。 它经常对我有用......

$output = htmlentities($db_output);
echo $output;

答案 3 :(得分:0)

你究竟得到这些“圆形引号和撇号”?如果他们的最终源是Word或Outlook文档,则它们将在Windows-1252中编码。如果您将Word文档中的直接复制并粘贴到UTF-8网页中,则应使用剪贴板的UTF-8版本,这些字符将以多字节UTF-8字符形式出现。如果这些字符首先通过其他文件或非UTF-8网页,那么它们可能仍然保留在Word“智能引用”单字节编码中,这在UTF-8中是无效的(因此?-in-black-钻石雕文)。请注意,声称为Latin-1(ISO-8859-1)的网页经常呈现为Windows-1252,因为1)Smart Quotes覆盖的控制代码x80-x9F很少使用,2)它很常见智能行情与文本混合。

对于将引号和撇号设为“无效字符”的UTF-8页面,请告知浏览器使用Windows-1252编码代替页面(查看&gt;字符编码或类似内容)。如果这些字符现在正确显示,则未翻译的智能引号就成了问题。不幸的是,一旦他们进入数据库,只有手动编辑才能修复它们。