<?php
function unescape($str)
{
$str = rawurldecode($str);
preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v)
{
if(substr($v,0,2) == "%u" && strlen($v) == 6)
{
$ar[$k] = iconv("UCS2","GBK",pack("H4",substr($v,-4)));
if($ar[$k]===FALSE)
{
echo "Convert False<br>";
}
else
echo "ok<br>";
}
}
return join("",$ar);
}echo unescape("%u82F9%u679C");
?>windows下正常显示汉字,linux下显示乱码 鱧
不知道是为什么?附linux下iconv信息
iconv
iconv support enabled
iconv implementation glibc
iconv library version 2.3.4 Directive Local Value Master Value
iconv.input_encoding ISO-8859-1 ISO-8859-1
iconv.internal_encoding ISO-8859-1 ISO-8859-1
iconv.output_encoding ISO-8859-1 ISO-8859-1
function unescape($str)
{
$str = rawurldecode($str);
preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v)
{
if(substr($v,0,2) == "%u" && strlen($v) == 6)
{
$ar[$k] = iconv("UCS2","GBK",pack("H4",substr($v,-4)));
if($ar[$k]===FALSE)
{
echo "Convert False<br>";
}
else
echo "ok<br>";
}
}
return join("",$ar);
}echo unescape("%u82F9%u679C");
?>windows下正常显示汉字,linux下显示乱码 鱧
不知道是为什么?附linux下iconv信息
iconv
iconv support enabled
iconv implementation glibc
iconv library version 2.3.4 Directive Local Value Master Value
iconv.input_encoding ISO-8859-1 ISO-8859-1
iconv.internal_encoding ISO-8859-1 ISO-8859-1
iconv.output_encoding ISO-8859-1 ISO-8859-1
一种方法是把iconv换成 mb_convert_encoding
另一种方法是修改iconv 的实现,从glibc 改为libiconv
搞了半天,烦躁!
有朋友碰到的话,也可以这么解决了