-2

これらのノード値をエンコードする 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") 

何が悪いのか教えていただけますか?

4

1 に答える 1

1

初めに:

  1. ライブラリを使用する目的は、エンコードとデコードを自動的に行うことです。
  2. リテラル文字を挿入<すると、XML タグが定義されます。

<およびがどのようにエンコードされているかを気にする正当な理由があると仮定すると、>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% 同等です (欠落している<?xml version="1.0"?>見出しを除いて)。

編集 #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'Brianされません O\'Brian。文字列を変更するのではなく、エンコードしています。

全体像には、次のようなjQueryコードがあると思われます。

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

...次のようなものがあるはずです:

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

編集#2:

あなたのオーサリング システムがどのように機能するのか想像もつきません (実際にHTML タグを入力するのに WYSIWYG エディターを使用していないことを願っています)。ブラケット:

  1. データ
  2. タグ

DOMDocumentではcreateElement()でタグを作成でき、以前に作成したタグをappendChild()などで挿入できます。

限目。

于 2013-03-11T13:29:01.970 に答える