【问题标题】:html_entity_decode not working in XML dom nodeValue [closed]html_entity_decode 在 XML dom nodeValue 中不起作用 [关闭]
【发布时间】:2013-03-11 13:18:18
【问题描述】:

我有 test.xml 文件,我希望在其中对这些节点值进行编码: ...

<section id="1">
<title id="2">&gt;</title>
<title id="2">&lt;</title>
<title id="2">&lt;</title>
</section>

...

所以我写了这段代码,但是在它保存 XML 之后是相同的,没有一个节点值从“$lt;”解码为“

php代码:

$dom = new DOMDocument;
$dom->load("test.xml");
$titles = $dom->getElementsByTagName('title');

foreach ($titles as $title) {

$title->nodeValue=html_entity_decode($title->nodeValue);
}
 $dom->save("success.xml") 

你能告诉我它有什么问题吗?

【问题讨论】:

  • 这并没有错。您所体验的是预期的(唯一有效的)行为。

标签: php xml entity decode entities


【解决方案1】:

首先:

  1. 使用库的全部目的是自动为您完成编码和解码。
  2. 如果您注入文字 &lt; 字符,则您正在定义一个 XML 标记。

假设您有正当理由关心 &lt;&gt; 的编码方式,您必须使用 CDATA:

<?php

$dom = new DOMDocument;
$dom->load("test.xml");
$titles = $dom->getElementsByTagName('title');

foreach ($titles as $title) {
    $newNode = $dom->createCDATASection($title->nodeValue);
    $title->nodeValue = null;
    $title->appendChild($newNode);
}
$dom->save("success.xml");

...生成:

<?xml version="1.0"?>
<section id="1">
<title id="2"><![CDATA[>]]></title>
<title id="2"><![CDATA[<]]></title>
<title id="2"><![CDATA[<]]></title>
</section>

但此文档与您已有的文档 100% 等效(除了缺少的 &lt;?xml version="1.0"?&gt; 标题)。

编辑#1:实体只是编码特殊字符的句法技巧,它们根本不会改变节点内容,PHP会自动为您解码所有内容:

$dom = new DOMDocument;
$dom->load("test.xml");
$titles = $dom->getElementsByTagName('title');

foreach ($titles as $title) {
    var_dump($title->nodeValue);
}

... 按预期打印解码后的内容:

string(1) ">"
string(1) "<"
string(1) "<"

也许用这个其他例子更容易看出:

echo 'O\'Brian';

... 打印 O'Briannot O\'Brian。我们正在对字符串进行编码,而不是修改它。

我怀疑在整个图片中有一些像这样的jQuery代码:

$.get('ajax/data.php', function(data) {
    $('.result').text(data);
});

...应该有类似的东西:

$.get('ajax/data.php', function(data) {
    $('.result').html(data);
});

编辑#2:

我什至无法想象你的创作系统是如何工作的(我希望你没有使用 WYSIWYG 编辑器来实际 type HTML 标签)但你已经询问了 XML 和 XML你只能用尖括号做两件事:

  1. 数据
  2. 标签

DOMDocument 中,您可以使用createElement() 创建标签,并且可以插入之前创建的标签,例如appendChild().

期间。

【讨论】:

  • 好吧,整个原因是为 html 编码一些样式标签,因为:<b>这将是粗体文本 </b>呈现为 这将是粗体文本 而不是真正的粗体文本
  • @KukoricaJános - XML 没有关于 HTML 格式的最微弱的想法。查看我的编辑。
  • 首先,感谢您的回答。我知道 php 和 html 正在将这些编码的字符转换为它们的正常形式,但在我的情况下,我需要有正常的形式,如: 或其他什么,因为用于 xml 文件的 css im 无法处理它如果它的编码。所以我想做的就是将所有编码值替换为它们的真实形式,以便 css 可以工作。
  • @KukoricaJános - 但你不必这样做。请再次阅读我的编辑,如果有不清楚的地方,请随时要求进一步澄清。
  • 我确实从所见即所得的编辑器中获取了字符串,该编辑器将 标记为 <和> ,在我将 CSS 文件添加到 XML 之前,它不是问题。在 CSS 中,我将 和其他标签声明为 font-weight:bold;等等。因此,如果在浏览器窗口中打开 xml 文件,则 标记内的文本将被格式化为粗体。但它只有在我的 XML 文件中有 而不是 &lg;b$gt; 时才有效
猜你喜欢
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2012-09-05
  • 2016-06-02
  • 1970-01-01
  • 2011-11-12
相关资源
最近更新 更多