2015-05-05 162 views
0

我試圖發送特殊字符(小於,大於)到使用SimpleXMLElement的節點的文本,但它將其轉換爲轉義值。SimpleXMLElement將值設置爲特殊字符

$header[0] = "%SET(Amt_,<AMT>". $amt . "</AMT>) \n" .$header[0]; 

上述結果在XML文件中的以下內容:

%SET(Amt_,&lt;AMT&gt;100&lt;/AMT&gt;) 

我嘗試使用html_entity_decode,它仍然寫信給文件的方式。有沒有辦法將「特殊」字符寫入單純形元素對象的文本值?

澄清:我想在調用$header->asXML()時將實際字符'<'和'>'寫入文件。目前,轉義版本是寫入文件的內容。

+0

在瀏覽器上還是直接看到文件? –

+0

包含非轉義特殊字符的XML無效,並會引發錯誤。 – michi

+0

它在瀏覽器上正確顯示,但我關心的是文件的實際內容 - 它被用作另一個程序的輸入,它不會將>或<解釋爲< or > – ddnm

回答

1

發送數據時使用htmlspecialchars,並且只要您想獲取原始字符串,就使用htmlspecialchars_decode

<?php 
    $amt = 100; 
    $header[0] = "Some Value"; 
    $header[0] = "%SET(Amt_,<AMT>". $amt . "</AMT>) \n" .$header[0]; 
    $node = htmlspecialchars($header[0]); 
    $value = htmlspecialchars_decode($node); 
    file_put_contents("filename.txt", $value); 
    echo "written on file"; 
?> 
+0

這仍然不會寫入<,>歸檔。 '%SET(Amt_,& lt; AMT & gt; 100 & lt;/AMT & gt;)' – ddnm

0

一個解決,對我的工作的情況下,我重新打開該文件的內容,解碼並重新保存到文件。

$xml->asXML('test.xml'); 
$coded = file_get_contents('test.xml'); 
file_put_contents('test.xml', htmlspecialchars_decode($coded), LOCK_EX);