【问题标题】:Unicode string phpUnicode 字符串 php
【发布时间】:2011-04-08 17:20:53
【问题描述】:

我有一个问题! 我想在php中打印一个unicode字符串(比如'سلام')! 但是当我只使用 echo 一些 ???出现!!!

我该怎么办??? 当我想 cho 从数据库中检索到的字符串时,就会发生这种情况!

echo 'سلام';

结果是:

????

我尝试使用 header 函数,但这对我没有帮助!

【问题讨论】:

  • 您是否指定了正确的字符编码?
  • 不知道为什么这被否决了,这个问题是完全有效的。我终于找到工作的解决方案在这里:stackoverflow.com/questions/2446778/…

标签: php string unicode echo


【解决方案1】:

你需要做三件事:

  1. 确保您以 UTF-8 数据形式接收数据。对于 MySQL,请在选择记录之前查询 SET NAMES 'utf8'
  2. 确保在处理 UTF-8 字符串时使用 UTF-8 兼容函数。
  3. 确保将输出编码设置为 UTF-8。对于 HTML,这可以通过将Content-type HTTP 标头设置为(例如)text/html; charset=utf-8 来完成。

当然,将“UTF-8”替换为支持所需字符的任何编码。无需更改数据库表(可能的性能提升除外)。如果您决定使用 UTF-16 或其他不(大部分)ASCII 兼容的东西,您可能需要更改 HTML 模板等。

【讨论】:

  • 如果你打算在 mysql 中存储 unicode 数据,你需要使用支持它的字符集。默认情况下,Mysql 使用 latin1,但您可以切换到 utf-8。
  • @troelskn,我假设数据已经正确存储。我提到更改数据库表是因为,例如,如果站点切换到 UTF-16,则不需要更改数据库数据的字符集,因为转换是为您完成的。
【解决方案2】:

您需要在 HTTP 响应中声明使用的字符编码。你可以使用header function:

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

这样,输出被声明为带有 UTF-8 字符编码的 HTML。请注意,当您已经将数据发送到客户端而不缓冲它时,您不能使用header。因此,要么使用output control 来缓冲输出,以便您可以在已经有一些输出的情况下修改标头,或者在任何输出之前使用header

【讨论】:

    【解决方案3】:

    也许我有点太晚了,但这对我有用:

    echo utf8_encode('سلام');
    

    【讨论】:

      猜你喜欢
      • 2019-04-09
      • 1970-01-01
      • 2011-06-09
      • 2013-08-20
      • 2014-11-02
      • 2015-04-21
      • 1970-01-01
      相关资源
      最近更新 更多