问题:
当我从MySQL表中检索值到我的PHP Zend Framework应用程序时,字符ä和ö从数据库返回到我的浏览器,如下所示。
可能出现问题的任何想法?我已经尝试将一些属性设置为UTF-8,但仍然会发生这种情况......我想我还是错过了一些东西。
你能解决一下如何摆脱这个问题吗?我需要设置什么配置等。
谢谢:)
答案 0 :(得分:1)
当读取错误编码的字符到浏览器时,它们会显示为 或?。在某处存在编码不匹配:
这些字符可以在Unicode UTF-8中使用,因此您应该验证您的数据库表格排序是utf8_bin
还是类似,因为如果您想以UTF-8瑞典语存储所有内容,可以使用{{ 1}}
在浏览器中,确保将内容编码设置为自动检测。
要在MySQL中创建UTF-8 / utf8_bin表,下面是一个示例:
utf8_swedish_ci
要更改现有表以使用UTF-8,请使用以下命令:
CREATE TABLE `sample` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
This post对是否使用ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
注意CONVERT TO CHRACTER SET utf8
和CHARSET
都必须设置,否则您将自动获得COLLATE
对于HTML,可以使用以下命令设置charset:
COLLATE=utf8_general_ci
答案 1 :(得分:1)
我建议您查看浏览器中设置的“网站编码”。
如果网站没有提供编码,你的mysql / php正在“正确”处理它,这可能会发生(例如它设置为“西部1252”但需要utf8 / unicode)
在Firefox中,您可以通过视图查看编码 - >编码(或类似)
答案 2 :(得分:1)
您只需将编码正确设置为UTF-8即可。以下是最小化工作解决方案的基本步骤:
header('Content-type: text/html; charset=utf-8');
(另外,您可以指定编码for your document)php.ini
不会覆盖编码。如果您有外国.htaccess
文件,请检查它们是否也是如此。如果您正确处理UTF-8,则不需要utf8_encode
/ utf8_decode
,htmlentities
等,并且无需特殊处理即可正确输出重音字符。
注意:UTF-8不会处理某些区域设置,尤其是Thaï。
答案 3 :(得分:1)
关于 Zend_Db_Adapter_Pdo_Mysql ,请确保您的构造函数使用 UTF-8 ,如下所示:
$your_pdo = Zend_Db::factory('Pdo_Mysql', array(
'host' => DATABASE_HOST,
'username' => DATABASE_USERNAME,
'password' => DATABASE_PASSWORD,
'dbname' => DATABASE_DBNAME,
'options' => array( 'charset' => 'utf8' )
) );
在使用 HTML 中的数据之前,请将其转义:
return htmlspecialchars( $string, ENT_QUOTES, 'UTF-8' );
查看内容类型,文件编码等所有其他答案。