2013-11-21 32 views
-1

我的PHP應用程序正在輸出XML文件,其中一些輸出可能包含商標和/或版權字符。有沒有辦法在輸出中轉義這些字符?如何從PHP輸出的XML中輸出商標和版權字符

謝謝!

+0

請說明你已經採取了這樣的措施遠遠不能實現所需的功能。 –

+1

你爲什麼要逃避他們?它們在XML中沒有特殊的含義。您只需在使用字符編碼時保持一致。 – Quentin

回答

5

唯一的特殊字符,你需要 XML逃跑是:

  • < - &lt;
  • > - &gt;
  • & - &amp;
  • " - &quot;
  • ' - &apos;/&#39;

您可以在屬性值或文本節點中使用轉義變體。以下兩個示例代表相同的內容。

<foo>&lt;[email protected]&gt;</foo> 
<foo><![CDATA[<[email protected]>]]></foo> 

<foo/>的的nodeValue總是<[email protected]>

第一個是文本節點,第二個是cdata節。在cdata部分,實體不被允許,並且禁止序列]]>。如果DOM包含]]>,DOM將自動分割一個CDATA部分。

如果您不使用支持Unicode的Unicode編碼來處理XML,則只需要轉義其他特殊字符,如©。如果你想要一個簡單的ASCII XML,你可以將特殊字符寫成數字字符引用。數字是Unicode中字符的代碼點。

  • © - &#169;/&#xA9;

Schema和DTD可以定義命名字符實體引用。這些在XML中不可用,但可以以基於XML的格式提供。 (X)HTML就是一個例子。

  • © - &copy;

如果使用DOM,需要很會​​照顧它。

在UTF-8中,只有XML特殊字符纔會被轉義。

$dom = new DOMDocument('1.0', 'UTF-8'); 
$dom->appendChild($dom->createElement('foo')); 
$dom->documentElement->appendChild($dom->createTextNode('<©€äöü>')); 

echo $dom->saveXml(); 

輸出:

<?xml version="1.0" encoding="UTF-8"?> 
<foo>&lt;©€äöü&gt;</foo> 

在ASCII,多了很多將被轉義:

$dom = new DOMDocument('1.0', 'ASCII'); 
$dom->appendChild($dom->createElement('foo')); 
$dom->documentElement->appendChild($dom->createTextNode('<©€äöü>')); 

echo $dom->saveXml(); 

輸出:

<?xml version="1.0" encoding="ASCII"?> 
<foo>&lt;&#169;&#8364;&#228;&#246;&#252;&gt;</foo> 
+0

用™和®取代特殊字符的伎倆!感謝大家的幫助! –