好吧,我有一个MySQL数据库,编码为utf8_unicode_ci,它就像当前应用程序的魅力一样运行(用Code Igniter编写)
现在,我正在开发一个新的PHP应用程序,当我尝试恢复数据时,几个字符是不可读的 - 使用phpMyAdmin在数据库中显示正常的字符,但是当我尝试将其放在网页中时,它变得像“ROLA 60”。
这些字符是西班牙字母,例如ñ,á,Ó...或ascii代码,如€,Ø......
问题出在哪里?我将页面设置为 meta http-equiv =“Content-Type”content =“text / html; charset = UTF-8”,我已经尝试过mysql_set_charset()函数,但仍然什么都没有。
有这种问题的经验吗?
答案 0 :(得分:3)
我在数据库驱动的应用程序中注意到了这个确切的问题,我花了很长时间才解决它!
问题出现是因为应用程序中至少有三个位置需要定义字符集,并且它们必须都是相同的字符集(并且该字符集必须能够处理您正在处理的字符)。 / p>
当浏览器不理解传递的字符时,会出现问号符号及其变化。
确保您的角色集在以下位置匹配:
从您的帖子判断,您的PHP配置可能设置为使用不同的default_charset。这意味着你的数据库将存储好的字符,并将字符发送到你的脚本,但PHP脚本本身不知道如何处理字符,因此输出到浏览器作为恼人的问号符号
尝试将php.ini值更改为相同的字符集,您可能会惊讶地看到字符显示正常!如果您无权访问php.ini,则可以使用以下函数更改该值:
ini_set("default_charset", "UTF-8");
希望这有帮助。
答案 1 :(得分:2)
如果mysql_set_charset()不起作用,请尝试执行
mysql_query('SET NAMES utf8');
建立连接后。
答案 2 :(得分:2)
任何类型的问题都只需要一次经验:了解你在做什么和调试。由于像stackoverflow这样的网站,现在非常难得。
有3个级别涉及编码:
每个都应分别检查。
检查HTML级别很简单。只需在浏览器中单击“查看”菜单,然后“编码”并查看标记的那个。如果它是正确的,你就没事了。如果没有 - 发送错误的 HTTP标头,您必须正确
对于服务器端来说,没什么可做的。只是告诉mysql你想要哪种编码。它可以通过两种方式完成:
请注意在mysql中名为utf8
的UTF-8编码。
数据库级别似乎是O.K.在你的情况下。
答案 3 :(得分:0)
mysql_query('SET NAMES utf8');
在通过Chrome浏览时有效,但不适用于FF或IE
答案 4 :(得分:0)
尝试以下方法可能会解决您的问题:
<?php
$text = "This is the Euro symbol '€'.";
echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;
?>