php 中英文混编并且中文是十六进制 unicode 的字符串的解码方案
到网上找到一段十进制unicode串的解码方案,我发挥了下,把十六进制的解码也给解决了:
英文和十六进制中文混编的:
代码
function conv($str)
{
preg_match_all("/\\\\u.{4}|.+/U",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v)
{
if(substr($v,0,2) == "\\u")
$ar[$k] = iconv("UCS-2","utf-8",pack("H4",substr($v,-4)));
}
return join("",$ar);
//return iconv("UCS-2","utf-8",pack("H4",$str));
}
{
preg_match_all("/\\\\u.{4}|.+/U",$str,$r);
$ar = $r[0];
foreach($ar as $k=>$v)
{
if(substr($v,0,2) == "\\u")
$ar[$k] = iconv("UCS-2","utf-8",pack("H4",substr($v,-4)));
}
return join("",$ar);
//return iconv("UCS-2","utf-8",pack("H4",$str));
}
网上的:
代码
<?php
/*
方法作用 :对应JS中的escape函数,即将字符串转换成%+十六进制数
*/
function phpEscape($str)
{
$sublen=strlen($str);
$retrunString="";
for ($i=0;$i<$sublen;$i++)
{
if(ord($str[$i])>=127)
{
$tmpString=bin2hex(iconv("utf-8","ucs-2",substr($str,$i,2)));
//$tmpString=substr($tmpString,2,2).substr($tmpString,0,2); //window下可能要打开此项
$retrunString.="%u".$tmpString;
$i++;
} else {
$retrunString.="%".dechex(ord($str[$i]));
}
}
return $retrunString;
}
/*
方法作用 :对应JS中的unescape函数,%+十六进制数转换成中文字符
*/
function phpUnescape($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","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) == "&#") $ar[$k] = iconv("UCS-2","utf-8",pack("n",substr($v,2,-1)));
}
return join("",$ar);
}
?>
/*
方法作用 :对应JS中的escape函数,即将字符串转换成%+十六进制数
*/
function phpEscape($str)
{
$sublen=strlen($str);
$retrunString="";
for ($i=0;$i<$sublen;$i++)
{
if(ord($str[$i])>=127)
{
$tmpString=bin2hex(iconv("utf-8","ucs-2",substr($str,$i,2)));
//$tmpString=substr($tmpString,2,2).substr($tmpString,0,2); //window下可能要打开此项
$retrunString.="%u".$tmpString;
$i++;
} else {
$retrunString.="%".dechex(ord($str[$i]));
}
}
return $retrunString;
}
/*
方法作用 :对应JS中的unescape函数,%+十六进制数转换成中文字符
*/
function phpUnescape($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","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) == "&#") $ar[$k] = iconv("UCS-2","utf-8",pack("n",substr($v,2,-1)));
}
return join("",$ar);
}
?>

浙公网安备 33010602011771号