處理內容有&特殊字符thinkphp返回xml無法解析的問題xxx


處理內容有&特殊字符thinkphp返回xml無法解析的問題<![CDATA[xxx]]>

// xml 轉義特殊字符 如&'" <![CDATA["標記開始,以"]]>標記結束
不能直接把data進行for循環,否則里面的數組對象就變成一個對象字符了

// xml 轉義特殊字符 如&'" <![CDATA["標記開始,以"]]>標記結束
$xml .= (is_array($val) || is_object($val)) ? data_to_xml($val, $item, $id) : '<![CDATA['.$val.']]>';
必須是最終文本值才能加上這個<![CDATA[xxx]]>
測試xml特殊字符&&&#@R<>>d?#dfasf*()@!~-=+_''"":;,./

ThinkPHP/Common/functions.php

 1 /**
 2  * XML編碼
 3  * @param mixed $data 數據
 4  * @param string $root 根節點名
 5  * @param string $item 數字索引的子節點名
 6  * @param string $attr 根節點屬性
 7  * @param string $id   數字索引子節點key轉換的屬性名
 8  * @param string $encoding 數據編碼
 9  * @return string
10  */
11 function xml_encode($data, $root='think', $item='item', $attr='', $id='id', $encoding='utf-8') {
12     if(is_array($attr)){
13         $_attr = array();
14         foreach ($attr as $key => $value) {
15             $_attr[] = "{$key}=\"{$value}\"";
16         }
17         $attr = implode(' ', $_attr);
18     }
19     $attr   = trim($attr);
20     $attr   = empty($attr) ? '' : " {$attr}";
21     $xml    = "<?xml version=\"1.0\" encoding=\"{$encoding}\"?>";
22     $xml   .= "<{$root}{$attr}>";
23     $xml   .= data_to_xml($data, $item, $id);
24     $xml   .= "</{$root}>";
25     return $xml;
26 }
27 
28 /**
29  * 數據XML編碼
30  * @param mixed  $data 數據
31  * @param string $item 數字索引時的節點名稱
32  * @param string $id   數字索引key轉換為的屬性名
33  * @return string
34  */
35 function data_to_xml($data, $item='item', $id='id') {
36     $xml = $attr = '';
37     foreach ($data as $key => $val) {
38         if(is_numeric($key)){
39             $id && $attr = " {$id}=\"{$key}\"";
40             $key  = $item;
41         }
42         $xml    .=  "<{$key}{$attr}>";
43         // xml 轉義特殊字符 如& 以<![CDATA[標記開始,以]]>標記結束,必須是最終文本值才能加上這個<![CDATA[xxx]]>
44         $xml    .=  (is_array($val) || is_object($val)) ? data_to_xml($val, $item, $id) : '<![CDATA['.$val.']]>';
45         $xml    .=  "</{$key}>";
46     }
47     return $xml;
48 }

 

---------------------------------
&lt; < 小於號
&gt; > 大於號
&amp; & 和
&apos; ' 單引號
&quot; " 雙引號
實體必須以符號"&"開頭,以符號";"結尾。 注意: 只有"<" 字符和"&"字符對於XML來說是嚴格禁止使用的。
剩下的都是合法的,為了減少出錯,使用實體是一個好習慣。

基本的html轉義字符特殊字符
字符 十進制    轉義字符
“      &#34;   &quot;
&     &#38;   &amp;
<     &#60;   &lt;
>     &#62;   &gt;
空格  &#160; &nbsp;

-----------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM