【问题标题】:Unicode and PHP - am I doing something wrong?Unicode 和 PHP - 我做错了吗?
【发布时间】:2010-04-07 02:41:28
【问题描述】:

我使用的是 Kohana 3,它完全支持 Unicode。

这是我<head>的第一个孩子

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

我插入的 Unicode 字符是 é,就像在 Café 中一样。

但是,我得到的三角形是 ? (如无法解码字符)。

据我在自己的代码中可以看出,我没有对文本进行任何字符串操作。

事实上,我已将重音直接放入视图的 PHP 文件中,但仍然无法正常工作。

我从这个页面复制了这个角色:http://www.fileformat.info/info/unicode/char/00e9/index.htm

我才刚刚开始检查 PHP 的 Unicode 限制,所以我可能做错了什么。

那么,我该如何显示这个字符呢?我需要求助于 HTML 实体吗?

更新

所以这行得通

Caf<?php echo html_entity_decode('&#233;', ENT_NOQUOTES, 'UTF-8'); ?>

为什么会这样?如果我从该脚本中复制带有重音符号 e 的输出并将其插入到我的文档中,它将不起作用。

【问题讨论】:

  • 你检查过你自己系统的字体吗?尝试下载您的 PHP 脚本生成的网页并在十六进制编辑器中查看它,看看您是否真的获得了 Unicode 字符。
  • 啊,我在我的 CSS 中使用了 Georgia 字体。这可能是问题所在?
  • @mazin k 它也没有显示在&lt;title&gt; 标签中...所以它不应该是字体问题?
  • OS X Snow Leopard 自带十六进制编辑器吗?

标签: php unicode


【解决方案1】:

查看 http 标头。你应该会看到类似

Content-Type: text/html; charset=UTF-8

浏览器不太关注元标记,如果有一个真正的 http 标头说明不同的编码。

更新

从中得到什么?

echo bin2hex('é');
echo chr(0xc3) . chr(0xa9);

你应该得到c3a9é,否则我会说文件编码问题。

【讨论】:

  • +1 HTTP 标头经常被遗忘,但比元标记重要得多。您可以使用header() 输出适当的标头,Kohana 也可能有自己的包装器。
【解决方案2】:

我猜,你看到了,无效 UTF-8 字节序列的替换字符。您的文本不是 UTF-8 编码的。检查编辑器的设置以控制 PHP 文件的编码。

如果您不确定源代码的编码,可以按照此处所述(德语文本)强制执行 UTF-8 兼容性:Force UTF-8

除了basic ones,您永远不需要实体。

【讨论】:

  • 我正在使用 Coda,我刚刚将 默认文件编码 切换为 Unicode (UTF-8) 并保存,但它没有修复它。
  • 尝试删除字符,在编辑器中切换到utf8,现在粘贴字符。文件大小应该比 utf8 编码时存在的字符大 2 个字节。
猜你喜欢
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 2011-09-23
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 2010-10-23
相关资源
最近更新 更多