【问题标题】:ë versus ë versus ëë 与 ë 与 ë
【发布时间】:2013-05-19 11:29:26
【问题描述】:

我需要两个 PHP 变量来匹配($path1$path2)。我只能更改其中一个 ($path1)。

变量都包含字母ë,但其中一个写为ë,另一个写为ë

当在页面的 HTML 中放置一个 utf-8 元标记时,它们都显示为ë,这很好,但这不会改变 PHP 变量。

使用utf8_encode ($path1) 似乎不起作用。

我该如何解决这个问题?

PS:这个问题是在之前发布的问题中提出的,但因为它与提出的问题不同,所以我重新发布了它。

【问题讨论】:

  • 您应该转储并编写十六进制代码,因为ëë 完全没用。 (它们被多次编码)

标签: php utf-8 character-encoding encode


【解决方案1】:

带重音的字母可以用 utf-8 两种方式书写(都有效)

F.ex.这些打印相同:

  • LATIN CAPITAL LETTER A WITH RING ABOVE (U+00C5) 是"\xC3\x85"
  • A 后跟 COMBINING RING ABOVE (U+030A) 是 "A\xCC\x8A"

您可以使用Normalizer::normalize() 对其进行规范化,但您需要为此启用有界的intl 包。

【讨论】:

  • 啊现在我明白了!有没有其他方法来规范化它?我,在共享主机环境中,可能无法启用 intl 包... :(
  • 或者是否有可能只翻译具有多个选项的字符的功能? (我觉得很难理解,所有这些字符集的东西:s)
  • 恐怕没有其他选择了。简单的转换是行不通的,因为目标编码与源编码相同。您可以转换为其他 unicode 字符集(f.ex. utf-16),然后重新编码为 utf-8,但我认为结果与源代码相同。
  • 我尝试将其转换为 utf-16/ISO/utf7/html 实体并返回,不幸的是你是对的:它不会改变它。我还尝试规范化字符串,正如我所想,更不幸的是:我无法在我的托管服务中安装 intl 包:( 感觉我被卡住了......绝对没有替代规范化的方法吗?为什么是一个函数比如 "str_replace ë with ë" 没有选项?理论上,如果我有一个像 ë 这样的所有可能字符的列表,它会起作用,对吧?
  • 理论上?是的。但是 unicode 范围真的很广。我认为这不是一个真正的选择。
猜你喜欢
  • 2011-11-28
  • 1970-01-01
  • 2011-08-30
  • 2021-03-26
  • 2013-06-15
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多