【问题标题】:Character set woes字符集问题
【发布时间】:2010-10-01 14:43:25
【问题描述】:

我有一个用 php 构建的小型 ajax 应用程序。

使用 phpMyAdmin 我将 mysql 数据库设置为 utf-8,并导入了一个包含 utf-8 数据的文本文件。

在将 character-set-server=utf8 和 default-character-set=utf8 添加到 my.cnf 文件后,这在带有 easyphp 的 Windows 机器上运行良好。

我现在尝试将其移至无法访问配置文件的生产服务器,并且不显示元音变音等字符。

是否可以在 php 代码(不是配置文件)中设置一些东西来解决这个问题,或者我可以给 mysql 一些命令?

我尝试使用 phpMyAdmin ALTER DATABASE vweb_50 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 从 utf8_general_ci 尝试,但没有任何区别。

【问题讨论】:

    标签: php mysql ajax utf-8 character-set


    【解决方案1】:

    这里有几件事要做,我不确定我是否正确理解了您的问题,但如果我理解了,我认为大部分问题都可以通过 PHP 函数 utf8_encode 解决和 utf8_decode

    • utf8_encode
      • 将 ISO-8859-1 字符串编码为 UTF-8
    • utf8_decode
      • 此函数将假定为 UTF-8 编码的数据解码为 ISO-8859-1。

    另外,如果需要,请查看htmlentities

    【讨论】:

    • 嗨乔希,我不认为你是。您想在 $rows[] = $row; 行上使用 htmlentities 或 utf8_encode,但进行了一些修改,以便您可以在每个字段中使用它。或者不要在那个函数中使用它,但是一旦你准备好显示它。
    • 嗨戴夫,你的意思是像 htmlentities($rows[] = $row); ?
    • 嗨,乔希,我的意思是在 $rows[] = $row 行中,$row 变量本身是一个数组,所以你必须执行以下操作:$out = new大批(); foreach($row as $k => $v) { $out[$k] = htmlentities($v); } $rows[] = $out;
    【解决方案2】:

    如果您在整个应用程序中使用 utf-8(我会推荐),则不需要 utf8_encode/decode 函数。您是否检查过您的页面以哪种编码方式提供?可能服务器配置为发送 iso-8859-1 作为字符集,而您的测试环境发送 utf-8。使用 Content-Type 标头设置编码:

    header("Content-Type: text/html; charset=utf-8");
    

    【讨论】:

    • 产生符号的页面是更大的 ajax 应用程序的一部分,而不是主页面。为“抓取”页面设置标题并不能解决任何问题。
    • 您需要确保从所有页面发送正确的标题 - 包括您通过 xhr 访问的页面。
    猜你喜欢
    • 2011-04-20
    • 2011-03-19
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多