今天在解析一個中文的 XML時,始終報錯 PCDATA invalid Char value 21 in Entity ,查詢了一下這個 21 的ascii 值,
發(fā)現(xiàn)是:
0001 0101 |
21 |
15 |
NAK |
␕ |
確認(rèn)失敗回應(yīng) |
怎么會有這樣奇怪的字符,我也搞不清楚。google 一下這個錯誤,發(fā)現(xiàn)很多網(wǎng)站都報這樣的錯誤,就是沒有一篇文章
說明為什么出錯了。折騰了半天,后來又看了Libxml的源代碼,發(fā)現(xiàn)下面的字符要在字符串里面排除掉:
二進(jìn)制 |
十進(jìn)制 |
十六進(jìn)制 |
縮寫 |
可以顯示的表示法 |
名稱/意義 |
0000 0000 |
0 |
00 |
NUL |
␀ |
空字符(Null) |
0000 0001 |
1 |
01 |
SOH |
␁ |
標(biāo)題開始 |
0000 0010 |
2 |
02 |
STX |
␂ |
本文開始 |
0000 0011 |
3 |
03 |
ETX |
␃ |
本文結(jié)束 |
0000 0100 |
4 |
04 |
EOT |
␄ |
傳輸結(jié)束 |
0000 0101 |
5 |
05 |
ENQ |
␅ |
請求 |
0000 0110 |
6 |
06 |
ACK |
␆ |
確認(rèn)回應(yīng) |
0000 0111 |
7 |
07 |
BEL |
␇ |
響鈴 |
0000 1000 |
8 |
08 |
BS |
␈ |
退格 |
|
|
|
|
|
|
|
|
|
|
|
|
0000 1011 |
11 |
0B |
VT |
␋ |
垂直定位符號 |
0000 1100 |
12 |
0C |
FF |
␌ |
換頁鍵 |
|
|
|
|
|
|
0000 1110 |
14 |
0E |
SO |
␎ |
取消變換(Shift out) |
0000 1111 |
15 |
0F |
SI |
␏ |
啟用變換(Shift in) |
0001 0000 |
16 |
10 |
DLE |
␐ |
跳出數(shù)據(jù)通訊 |
0001 0001 |
17 |
11 |
DC1 |
␑ |
設(shè)備控制一(XON 啟用軟件速度控制) |
0001 0010 |
18 |
12 |
DC2 |
␒ |
設(shè)備控制二 |
0001 0011 |
19 |
13 |
DC3 |
␓ |
設(shè)備控制三(XOFF 停用軟件速度控制) |
0001 0100 |
20 |
14 |
DC4 |
␔ |
設(shè)備控制四 |
0001 0101 |
21 |
15 |
NAK |
␕ |
確認(rèn)失敗回應(yīng) |
0001 0110 |
22 |
16 |
SYN |
␖ |
同步用暫停 |
0001 0111 |
23 |
17 |
ETB |
␗ |
區(qū)塊傳輸結(jié)束 |
0001 1000 |
24 |
18 |
CAN |
␘ |
取消 |
0001 1001 |
25 |
19 |
EM |
␙ |
連接介質(zhì)中斷 |
0001 1010 |
26 |
1A |
SUB |
␚ |
替換 |
0001 1011 |
27 |
1B |
ESC |
␛ |
跳出 |
0001 1100 |
28 |
1C |
FS |
␜ |
文件分割符 |
0001 1101 |
29 |
1D |
GS |
␝ |
組群分隔符 |
0001 1110 |
30 |
1E |
RS |
␞ |
記錄分隔符 |
0001 1111 |
31 |
1F |
US |
␟ |
單元分隔符 |
0111 1111 |
127 |
7F |
DEL |
␡ |
刪除 |
大多數(shù)都在 31 以前的幾個字符,注意,還有個字符 127 要去掉。去掉的方法我是用正則,用下面的正則就可以
去掉了:[\\x00-\\x08\\x0b-\\x0c\\0e-\\1f\\7f]。
希望對大家有用。
Tag標(biāo)簽: php,DOM,解析錯誤