【问题标题】:Decode HTML-encoded characters with extended ASCII使用扩展的 ASCII 解码 HTML 编码的字符
【发布时间】:2016-01-25 16:19:50
【问题描述】:

我有一个带有特殊字符的 XML 编码为 xx;在里面。只要我将这些字符输出到浏览器,就可以正常工作,因为它们是 HTML 编码(有点)。 但我需要使用simplexml_load_string 读取 XML 文件,这会导致某些字符出现垃圾,因为它们位于扩展的 ASCII 表中。

例如:

š 转换为 š - 但是当我尝试使用 html_entity_decode 时,我得到一个空字符。

我几乎尝试了从 iconvmb_decode_numericentity 的所有方法 - 没有任何效果。

我如何转换那些 xx;给真正的角色???

[编辑] 我发现这张表http://www.ascii-code.com 声称š 是使用ISO-8859-1 的扩展ASCII 字符 我很困惑...

【问题讨论】:

  • 鉴于你的例子 š应该解码成š,你没有使用utf-8编码而是一些iso。就个人而言,我会切换到 utf-8,但这不是重点。我的猜测是您需要指示 html_entity_decode() 坚持您喜欢的编码,而不是采用 php.ini 中指定的默认编码。
  • 谢谢卡雷尔 - 我实际上尝试过,使用 html_entity_decode() 支持的所有编码 - 但它们都不起作用:(
  • 听起来像是对 HTML 实体的非标准和/或可能已过时的用法。不确定是否有任何标准的 PHP 函数可以处理这个问题。也许你必须编写一个自定义的preg_replace_callback 函数或类似的函数来解码这些特定的代码点。
  • 这绝对不是标准的。 XML 由一些第 3 方公司提供。我不知道他们为什么要这样做。有趣的是,当我将“š”添加到谷歌搜索字段时,它会将其转换为 š - 所以如果他们能做到,我为什么不能呢? ;)

标签: php decode html-entities extended-ascii


【解决方案1】:

您显然正在处理两个在打印时看起来几乎相同的不同字符:

我发现我的字体或文本编辑器都不能正确处理第二个。所以你很可能会因为这个确切的原因得到一个空白字符。

第二个似乎是某种weird control character,我无法理解其确切目的:

后跟单个可打印字符(0x20 到 0x7E)或 格式效应器(0x08 到 0x0D)。目的是提供一种手段 通过哪个控制功能或图形字符,将 无论使用哪个图形或控件集都可用 可以定义。以下字节将调用的内容的定义 从未在国际标准中实施。不属于 ISO/IEC 6429 第一版

值得注意的是,character references in XML 使用来自固定编码(某些 UCS 变体)的数字代码。如果 XML 文件的作者不遵循此约定,您将面临无效的 XML(有效地阻止它被 XML 库解析的东西)或包含损坏数据的有效 XML(最多,将需要繁琐的后处理)。

【讨论】:

  • 谢谢阿尔瓦罗。但它绝对应该转换为第一个 (š),因为它是具有该字符的名称的一部分。正如我在编辑中提到的,我发现 š是 windows-1252 ASCII 表的一部分。但即使我尝试 html_entity_decode('š', ENT_COMPAT, 'Windows-1252'),我得到一个空白输出。
  • You can't choose the encoding of XML entities。无论如何,不​​要相信渲染的字符;改用十六进制编辑器或通过 bin2hex() 打印数据(如果没有的话)。
猜你喜欢
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 2011-06-05
  • 2016-02-12
  • 2023-04-02
  • 1970-01-01
  • 2014-10-30
  • 2020-01-19
相关资源
最近更新 更多