%B4
PHP能解开这个么?
ISO-8859-1的一个图标符号
function Unescape($str)
{
$str = rawurldecode($str);
$str=str_replace("%B4","¤",$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);
}//UNescape
现在这个 日文 韩文 中文 繁体 都能解开,但ISO的不能.会变成一个?号
PHP能解开这个么?
ISO-8859-1的一个图标符号
function Unescape($str)
{
$str = rawurldecode($str);
$str=str_replace("%B4","¤",$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);
}//UNescape
现在这个 日文 韩文 中文 繁体 都能解开,但ISO的不能.会变成一个?号
PHP 的unescape函数由于PHP5不支持unicode,而JS的escape方法转义后的代码就是UNICODE的,所以PHP需要先解析unicode编码为utf8,然后再把utf8编码转成想要的编码 /**
* 解析JS的escape编码
*
* @param string $str
* @param string $encoding
*/
public static function unescape($str, $encoding = 'GBK')
{
$str = rawurldecode($str);
$text = preg_replace_callback("/%u[0-9A-Za-z]{4}/", array(self, 'unicode2Utf8'), $str);
return self::u8conv($text, $encoding);
}
/**
* 转换UNICODE编码为UTF8
*
* @param mixed $ar
*/
public static function unicode2Utf8($ar)
{
$c = '';
foreach($ar as $val){
$val = intval(substr($val, 2), 16);
if ($val < 0x7F) { // 0000-007F 单字节
$c .= chr($val);
} elseif ($val < 0x800) { // 0080-0800 双字节
$c .= chr(0xC0 | ($val / 64));
$c .= chr(0x80 | ($val % 64));
} else { // 0800-FFFF 三字节
$c .= chr(0xE0 | (($val / 64) / 64));
$c .= chr(0x80 | (($val / 64) % 64));
$c .= chr(0x80 | ($val % 64));
}
}
return $c;
}这个不错,可以试一下的
{
$str = rawurldecode($str);
$text = preg_replace_callback("/%u[0-9A-Za-z]{4}/", array(self, 'unicode2Utf8'), $str);
return self::u8conv($text, $encoding);
}
function unicode2Utf8($ar)
{
$c = '';
foreach($ar as $val){
$val = intval(substr($val, 2), 16);
if ($val < 0x7F) { // 0000-007F 单字节
$c .= chr($val);
} elseif ($val < 0x800) { // 0080-0800 双字节
$c .= chr(0xC0 | ($val / 64));
$c .= chr(0x80 | ($val % 64));
} else { // 0800-FFFF 三字节
$c .= chr(0xE0 | (($val / 64) / 64));
$c .= chr(0x80 | (($val / 64) % 64));
$c .= chr(0x80 | ($val % 64));
}
}
return $c;
}
echo unescape("%B4");
...Notice: Use of undefined constant self - assumed 'self' in E:\Newsite\1.php on line 5Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'self::unicode2Utf8', to be a valid callback in E:\Newsite\1.php on line 5Fatal error: Cannot access self:: when no class scope is active in E:\Newsite\1.php on line 6
怎么使用???
%B4
我在站长工具网站能解 其实是ISO-8859-1的一个字符希望能找到能解 ISO字符的 Unescape function