从文件里读出来%u9996%u9875...之类的16进制,怎样才能正常现实为中文,在线急等!!
网友回复:各位高手,救命啊!!难道就没有人知道吗??
网友回复:iconv
网友回复:我用过了不行啊
网友回复:
PHP code
Code highlighting produced by Actipro CodeHighlighter (freeware)
$str = "张三";
//这两个的结果都一样:张三
print_r( iconv('', 'UTF-8', $str) );
print_r( unescape($str) );
function unescape($str) {
    $str = rawurldecode($str);
    preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d ;|. /U",$str,$r);
    $ar = $r[0];
    //print_r($ar);
    foreach($ar as $k=>$v) {
        if(substr($v,0,2) == "%u"):
            $ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,-4)));
        elseif(substr($v,0,3) == "&#x"):
            $ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,3,-1)));
        elseif(substr($v,0,2) == "&#"):
            //echo substr($v,2,-1)."\r\n";
            $ar[$k] = iconv("UCS-2","UTF-8",pack("n",substr($v,2,-1)));
        endif;
    }
    return join("",$ar);
}
网友回复:我读出来是%u9996%u9875...之类的不是$str = "张三";
网友回复:md("%u9996%u9875...")试试
网友回复:我的天哪,加密也行吗??
那位老大能帮个忙啊
网友回复:
JScript code
Code highlighting produced by Actipro CodeHighlighter (freeware)
javascript:alert(unescape('%u9996%u9875'));
此代码浏览器地址栏运行即可...
那个是escape转换过的代码.
所以用unescape转回来就可以了.
网友回复:晕..PHP版...
那个...
9996是unicode编码...
首先把它转换成10进制,然后在对照unicode表转成值就可以了.
过程是这样滴.
JScript code
 
 
Code highlighting produced by Actipro CodeHighlighter (freeware)
 
 
javascript:alert(String.fromCharCode(parseInt(9996, 16)));
 

网友回复:9996是16进制的unicode编码...
网友回复:php中转换的!!我用iconv转怎么不行啊
网友回复:
PHP code
 
 
Code highlighting produced by Actipro CodeHighlighter (freeware)
 
<?php
$s = "%u9996%u9875";
echo(unescape($s));
 
function unescape($str) {
         $str = rawurldecode($str);
         preg_match_all("/%u.{4}|&#x.{4};|&#\d ;|. /U",$str,$r);
         $ar = $r[0];
         foreach($ar as $k=>$v) {
                  if(substr($v,0,2) == "%u")
                           $ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,-4)));
                  elseif(substr($v,0,3) == "&#x")
                           $ar[$k] = iconv("UCS-2","GBK",pack("H4",substr($v,3,-1)));
                  elseif(substr($v,0,2) == "&#") {
                           $ar[$k] = iconv("UCS-2","GBK",pack("n",substr($v,2,-1)));
                  }
         }
         return join("",$ar);
}
?>

网友回复:
PHP code
 
 
Code highlighting produced by Actipro CodeHighlighter (freeware)
$str = "&#24352&#24352;&#19977;%u9996%u9875";
 
print_r( unescape($str) );
 
function unescape($str) {
    $str = rawurldecode($str);
    preg_match_all("/(?:%u.{4})|&#x.{4};?|&#\d ;|. /U",$str,$r);
    $ar = $r[0];
    print_r($ar);
    foreach($ar as $k=>$v) {
        if(substr($v,0,2) == "%u"):
            $ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,-4)));
        elseif(substr($v,0,3) == "&#x"):
            $ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,3,-1)));
        elseif(substr($v,0,2) == "&#"):
            echo substr($v,2,-1)."\r\n";
            $ar[$k] = iconv("UCS-2","UTF-8",pack("n",substr($v,2,-1)));
        endif;
    }
    return join("",$ar);
}
网友回复:引用 13 楼 gzty 的回复:
PHP code
$str = "&#24352&#24352;&#19977;%u9996%u9875";
print_r( unescape($str) );
function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/(?:%u.{4}) |&#x.{4};? |&#\d ; |. /U",$str,$r);
$ar = $r[0];
print_r($ar);
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u"):
$ar[$k] = iconv("UCS-2","UTF-8",pack("H4",substr($v,-4)));
网友回复:这种方法不行,我用对照表的方式已经弄出来了,但是觉得太笨拙了,有没有直接就把unicode字符转为iso-8859-1的方法
网友回复: {unescape}
输出编码:utf-8。
(加号) 解析为空格。
%?? 解析为单字节字符。
%u???? 解析为 unicode 字符。

PHP code
Code highlighting produced by Actipro CodeHighlighter (freeware)
[url]http://www.CodeHighlighter.com/[/url]
<?php
function unescape($s) {
    return preg_replace_callback('/%u([\da-fA-F]{4})/', 'unesacpe_unicode_match', urldecode($s));
}
 
function unesacpe_unicode_match($matches) {
    return iconv('utf-16', 'utf-8', pack('H4', $matches[1]));
}
echo unescape('this is %u9996%u9875. ');    //    prints "this is 主页. ".
?>