äö字符编码,PHP,Zend MySQL-应用程序

时间:2012-07-31 14:54:13

标签: php mysql encoding utf-8 character

问题:

当我从MySQL表中检索值到我的PHP Zend Framework应用程序时,字符ä和ö从数据库返回到我的浏览器,如下所示。

可能出现问题的任何想法?我已经尝试将一些属性设置为UTF-8,但仍然会发生这种情况......我想我还是错过了一些东西。

你能解决一下如何摆脱这个问题吗?我需要设置什么配置等。

谢谢:)

4 个答案:

答案 0 :(得分:1)

当读取错误编码的字符到浏览器时,它们会显示为 或?。在某处存在编码不匹配:

  • 在您的浏览器中
  • 在数据库表格排序
  • 在HTML charset

这些字符可以在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 utf8CHARSET都必须设置,否则您将自动获得COLLATE

对于HTML,可以使用以下命令设置charset:

COLLATE=utf8_general_ci

答案 1 :(得分:1)

我建议您查看浏览器中设置的“网站编码”。

如果网站没有提供编码,你的mysql / php正在“正确”处理它,这可能会发生(例如它设置为“西部1252”但需要utf8 / unicode)

在Firefox中,您可以通过视图查看编码 - >编码(或类似)

答案 2 :(得分:1)

您只需将编码正确设置为UTF-8即可。以下是最小化工作解决方案的基本步骤:

  1. 确保您的DB connection uses UTF-8
  2. 确保您的HTTP内容类型设置为UTF-8(例如:header('Content-type: text/html; charset=utf-8');(另外,您可以指定编码for your document
  3. 将文件另存为UTF-8。在Windows中,文件保存为CP-1251,这意味着特殊的重音字符不会被视为UTF-8编码的字节(因此会丢弃输出到浏览器的内容。在保存文件时必须明确设置编码。在Linux / Mac中,这不是问题,因为默认使用UTF-8。
  4. 确保您的php.ini不会覆盖编码。如果您有外国.htaccess文件,请检查它们是否也是如此。
  5. 如果您正确处理UTF-8,则不需要utf8_encode / utf8_decodehtmlentities等,并且无需特殊处理即可正确输出重音字符。

    注意: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' );

查看内容类型,文件编码等所有其他答案。