<?php
$s=htmlentities("»");
$s=html_entity_decode($s);
echo $s;exit();//结果成“禄”了
?>匪夷所思!!

解决方案 »

  1.   

    echo htmlentities("»");
    //or UTF-8
    $s=htmlentities("»", ENT_COMPAT, 'GB2312 ');
    $s=html_entity_decode($s, ENT_COMPAT, 'GB2312 ');
    echo $s;exit();用的时候出问题,先看手册是怎么说的,然后再判断是否bug
      

  2.   

    没看明白你的话。我倾向于认定为bug。不过这不是重点,重点是解决这个问题。不知道有什么样的函数能准确的将html实体或编码转换为实际的字符。试了html_entity_decode、htmlspecialchars_decode、mb_convert_encoding都没成功。
      

  3.   

    你明白什么是编码不?数据编码转换如果不指定具体的编码,能正确转换才怪呢首先确定文件是什么编码(这是你的输入),其次确定输出到浏览器是什么编码(这是你的输出),其次要确定你的输入和函数入口的编码,例如你文件是gbk,那么你要告诉转换函数说,我给你的内容是gbk编码(htmlentities用gb2312),然后告诉函数转换的时候要按照gbk规则转换,接着你将内容反编码回来,你要告诉反编码函数,我给你的是gbk规则转换的内容,你还要按照gbk的规则转出,接着你拿到按照gbk反编码过的内容然后你向浏览器输出的时候也要按照gbk输出,如果有一个环节不是相同的编码,你不是相当于鸡同鸭讲
      

  4.   

    感谢你,你说的很多。但我只想请你,如果愿意的话,帮我证实下面代码运行结果:<?php
    $s=htmlentities('»',ENT_COMPAT,'utf-8');
    echo $s;
    $s=html_entity_decode('&#187;',ENT_COMPAT,'utf-8');
    echo $s;
    $s=html_entity_decode('&raquo;',ENT_COMPAT,'utf-8');
    echo $s;
    exit();
    ?>你看到了特殊的字符“禄”还是别的,还是就“»”?我告诉你,这段代码在php5.3.2里没问题。在php5.2.13里有问题。不知道这样能不能证实是bug?
      

  5.   

    应该还是楼上说的那回事,没有指明显示编码,被浏览器欺骗了。header('Content-Type:text/html;charset=utf-8');
      

  6.   

    <?php
    header("Content-type: text/html;charset=utf-8");
    $s=htmlentities('»',ENT_COMPAT,'utf-8');
    echo $s;
    $s=html_entity_decode('&#187;',ENT_COMPAT,'utf-8');
    echo $s;
    $s=html_entity_decode('&raquo;',ENT_COMPAT,'utf-8');
    echo $s;
    exit();这段代码在 5.3.2 和 5.2.8都没有问题
    <?php 
    ##charset = ISO8859-1header("Content-type: text/html;charset=ISO8859-1");$s=htmlentities(chr(187));
    echo $s, "<br>\n";$s=html_entity_decode('&#187;');
    echo $s, ' bin data is: ' . str2bin($s), "<br>\n";
    $s=html_entity_decode('&raquo;');
    echo $s, ' bin data is: ' . str2bin($s), "<br>\n";##charset = Utf-8$s=htmlentities(chr(194).chr(187), ENT_COMPAT, 'utf-8');
    echo $s, "<br>\n";$s=html_entity_decode('&#187;', ENT_COMPAT, 'utf-8');
    echo $s, ' bin data is: ' . str2bin($s), "<br>\n";$s=html_entity_decode('&raquo;', ENT_COMPAT, 'utf-8');
    echo $s, ' bin data is: ' . str2bin($s), "<br>\n";
    function str2bin($s) {
    $l = strlen($s); 
    $r = '';
    for($i = 0; $i < $l; $i++) {
    //echo ord($s{$i});
    $r .= decbin(ord($s{$i})) . ', ';
    }
    return $r;
    }另外给你一个测试是不是bug的代码,我这里5.2.8和5.3.2都没有问题