上面的XML文档请使用这个字符串进行urldecode后得到:
%3C%3Fxml+version%3D%221.0%22+encoding%3D%22gb18030%22%3F%3E%3Cxml%3E%DF%C7%85%F7%85%C0.%07%3C%2Fxml%3E

解决方案 »

  1.   

    用UTF-8应该不会存在这个问题1.改为
    <?xml version="1.0" encoding="utf-8" ?> 
    <xml>咔咓吚.</xml>2.将xml文件用记录本另存为 utf-8格式3.PHP文件本身也用记事本存为utf-84.在PHP文件头部加上
    header('Content-type:text/html;charset=utf-8');
    欢迎加入PHP爱好者QQ群:30169840
      

  2.   

    呵呵,UTF-8 的编码格式应该没有什么问题。
    但是,估计楼主不喜欢 UTF-8 这种格式吧。
      

  3.   

    <xml><![CDATA[咔咓吚.]]></xml>
      

  4.   

    不用utf-8编码也可以,我自己写的程序,只有php程序,编码都是gb2312的,刚开始也报编码错误那个,后来改成utf-8不行,结果都改成gb2312就好了!有人说,好像只要保证几个页面的编码一致就可以了,具体还有待验证!
      

  5.   

    你们先把那段encode后的编码decode后用PHP解析函数解析看看,再说问题吧
      

  6.   

    jom_ch 就回答到点上了.
    只是CSDN自动把 "<" 转为 "&lt;" 了.<?xml version="1.0" encoding="gb18030" ?> 
    <xml><![CDATA[咔咓吚</test>.]]></xml>
      

  7.   

    先把我哪段代码,转意后,存为XML文档,用IE打开,看看错误信息,再讨论,CDATA没用的
      

  8.   

    其中一个字符ord后是7,所以没办法直接发,只能先编码,所以你们一定要用那段
      

  9.   

    我不知道CSDN贴子显示里,是如何找到那个字符并把它去掉的
      

  10.   

    $str = "<xml>咔咓吚.</xml>";
    //.....
    $str = preg_replace("/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]/", '', $str);
    $str = htmlspecialchars($str);
      

  11.   

    上面弄错了
    htmlspecialchars 应该先转码再放到 <xml></xml> 里的
      

  12.   

    呵呵,我一般这样:function SBC_DBC($Str)
    {
    //---- 全角都转成半角 ----
    $Queue = Array(
    '0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4',
    '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9',
    'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D', 'E' => 'E',
    'F' => 'F', 'G' => 'G', 'H' => 'H', 'I' => 'I', 'J' => 'J',
    'K' => 'K', 'L' => 'L', 'M' => 'M', 'N' => 'N', 'O' => 'O',
    'P' => 'P', 'Q' => 'Q', 'R' => 'R', 'S' => 'S', 'T' => 'T',
    'U' => 'U', 'V' => 'V', 'W' => 'W', 'X' => 'X', 'Y' => 'Y',
    'Z' => 'Z', 'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd',
    'e' => 'e', 'f' => 'f', 'g' => 'g', 'h' => 'h', 'i' => 'i',
    'j' => 'j', 'k' => 'k', 'l' => 'l', 'm' => 'm', 'n' => 'n',
    'o' => 'o', 'p' => 'p', 'q' => 'q', 'r' => 'r', 's' => 's',
    't' => 't', 'u' => 'u', 'v' => 'v', 'w' => 'w', 'x' => 'x',
    'y' => 'y', 'z' => 'z', '-' => '-', '!' => '!', '。' => '.',
    ',' => ',', '%' => '%', '、' => ',', '#' => '#', '¥' => '$',
    '*' => '*', '(' => '(', ')' => ')', '|' => '|', '+' => '+',
    '[' => '[', ']' => ']', '{' => '{', '}' => '}', '~' => '~',
    ':' => ':', ';' => ';', '/' => '/', '?' => '?', '—' => '-',
    '“' => '"', '”' => '"', '‘' => "'", '’' => "'", '·' => '.'
    );
    $Str = preg_replace("/([\xA3][\xA1-\xAF\xB0-\xBF\xC1-\xDA\xE1-\xFC])/e", "\$Queue[\\1]", $Str);
    $Str = preg_replace("/([\xA1][\xA1-\xAF\xB0-\xB9])/e", "\$Queue[\\1]", $Str);
    return($Str);
    }
    function replace_xml($str)
    {
    //---- XML 非法字符过滤 ----
    $str = SBC_DBC($str);
    $str = preg_replace("/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]/", '', $str);
    $str = preg_replace("/[\r\n]+/", "\n", $str);
    $str = preg_replace("/[ \t]+/", " ", $str);
    $str = trim($str);
    $str = htmlspecialchars($str);
    return $str;
    }
    //... ...
    $str = "... ...";
    $str = replace_xml($str);
    //... ...
      

  13.   

    嗯,你这样处理或许不错,不过把非法字符过滤掉了,那就不能保证原样显示,就像CSDN一样,有时候还是很不方便的,很难提供原始数据。
      

  14.   

    那你就把
    chr(7) 转成 &#07;
    chr(8) 转成 &#08;
    chr(9) 转成 &#09;
    chr(10) 转成 &#10;
    ... ...
      

  15.   

    XML实在是恶心,真不知道怎么办才好
      

  16.   

    php 的 xml 解析函数不能解析非utf-8编码的宽字符文档
    需要自行编程解决,记得我发过一个的
      

  17.   

    记得以前我用GB2312的 。结果和其他做CS的同事搞了一天,最后放弃了。改了UTF-8
      

  18.   

    php 的 xml 解析函数不能解析非utf-8编码的宽字符文档
    需要自行编程解决,记得我发过一个的------------
    就是想看你那个,再拿出来晒晒吧-___-!!!
      

  19.   

    [\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]  我就是想知道这些都是什么特殊字符