先转换成unicode编码,在转换成utf-8编码。然后转换成十六进制编码
function u2utf8($c)
{
for($i=0;$i<count($c);$i++)
$str="";
if ($c < 0x80) {
$str.=$c;
}
else if ($c < 0x800) {
$str.=chr(0xC0 | $c>>6);
$str.=chr(0x80 | $c & 0x3F);
}
else if ($c < 0x10000) {
$str.=chr(0xE0 | $c>>12);
$str.=chr(0x80 | $c>>6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
}
else if ($c < 0x200000) {
$str.=chr(0xF0 | $c>>18);
$str.=chr(0x80 | $c>>12 & 0x3F);
$str.=chr(0x80 | $c>>6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
}
return $str;
} 例:
$s = u2utf8("中文");
$r = ""
for($i=0;$i<strlen($s);$i++)
$r .= sprintf("%2X",$s[$i]);
echo $r;
function u2utf8($c)
{
for($i=0;$i<count($c);$i++)
$str="";
if ($c < 0x80) {
$str.=$c;
}
else if ($c < 0x800) {
$str.=chr(0xC0 | $c>>6);
$str.=chr(0x80 | $c & 0x3F);
}
else if ($c < 0x10000) {
$str.=chr(0xE0 | $c>>12);
$str.=chr(0x80 | $c>>6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
}
else if ($c < 0x200000) {
$str.=chr(0xF0 | $c>>18);
$str.=chr(0x80 | $c>>12 & 0x3F);
$str.=chr(0x80 | $c>>6 & 0x3F);
$str.=chr(0x80 | $c & 0x3F);
}
return $str;
} 例:
$s = u2utf8("中文");
$r = ""
for($i=0;$i<strlen($s);$i++)
$r .= sprintf("%2X",$s[$i]);
echo $r;
上面的函数可以吗??
我去试试看!
就是说你已经持有含有utf8编码的串了,是吧。
设 $s = utf8串
$r = ""
for($i=0;$i<strlen($s);$i++)
$r .= sprintf("%2X",$s[$i]);
echo $r;
然后再用你的函数~
为什么值总是为0 0 0 0 ?显示的页面如下:
http://wap.m-dream.com.cn/wireless/u8to16.php
Function c2u(myText) For i = 1 to Len(myText) ' 对每一个字节进行处理 c = Mid(myText, i, 1) c2u = c2u & "&#x" & Hex(AscW(c)) & ";" ' 将传回的Unicode转换为十六进制值 next End Function
我比较了一下,是不是你的for循环里的语句没写全呢?
$r = ""
for($i=0;$i<strlen($s);$i++)
$r .= sprintf("%2X",ord($s[$i]));
echo $r;