/* 將 文字 轉換成 '12345' 或 '〹' */
// 使用 iconv
$unicode = base_convert(bin2hex(iconv('UTF-8', 'UCS-4', $string)), 16, 10);
// 使用 mb_convert_encoding
$unicode = base_convert(bin2hex(mb_convert_encoding($string, 'ucs-4', 'utf-8')), 16, 10);
// 補上 &#xxxxx;
$unicode = '&#' . base_convert(bin2hex(iconv("utf-8", "ucs-4", $str)), 16, 10) . ';';
// 將 〹 轉回 文字
$string = mb_convert_encoding($unicode, 'UTF-8', 'HTML-ENTITIES');
$str = "温"; $unicodeHtml = base_convert(bin2hex(iconv("utf-8", "ucs-2", $str)), 16, 10); print "&#".$unicodeHTML.";" // 顯示結果 温
unicode html 轉回文字,由於 php 沒有 hex2bin 的函式,所以我們自己簡單的寫一個來用。
<?php function hex2bin($string) { $len = strlen($string); retunr pack("H".$len, $string); } $str = "28201"; $unicodeHtml = iconv("ucs-2", "utf-8", hex2bin(base_convert($str, 10, 16))); print $unicodeHtml; // 顯示結果 温
?>
/////////////////////////////////////////////////////////////////////////
//
// UTF-8轉換為UNICODE
//
//
/////////////////////////////////////////////////////////////////////////
function numeric_code_utf8($utf8_string) {
$out = "";
$ns = strlen ($utf8_string);
for ($nn = 0; $nn < $ns; $nn++) {
$ch = $utf8_string[$nn];
$ii = ord ($ch);
if ($ii < 128)
$out .= $ch;
else if ($ii >>5 == 6) {
$b1 = ($ii & 31);
$nn++;
$ch = $utf8_string [$nn];
$ii = ord ($ch);
$b2 = ($ii & 63);
$ii = ($b1 * 64) + $b2;
$ent = sprintf ("&#%d;", $ii);
$out .= $ent;
}
else if ($ii >>4 == 14) {
$b1 = ($ii & 31);
$nn++;
$ch = $utf8_string [$nn];
$ii = ord ($ch);
$b2 = ($ii & 63);
$nn++;
$ch = $utf8_string [$nn];
$ii = ord ($ch);
$b3 = ($ii & 63);
$ii = ((($b1 * 64) + $b2) * 64) + $b3;
$ent = sprintf ("&#%d;", $ii);
$out .= $ent;
}
else if ($ii >>3 == 30) {
$b1 = ($ii & 31);
$nn++;
$ch = $utf8_string [$nn];
$ii = ord ($ch);
$b2 = ($ii & 63);
$nn++;
$ch = $utf8_string [$nn];
$ii = ord ($ch);
$b3 = ($ii & 63);
$nn++;
$ch = $utf8_string [$nn];
$ii = ord ($ch);
$b4 = ($ii & 63);
$ii = ((((($b1 * 64) + $b2) * 64) + $b3) * 64) + $b4;
$ent = sprintf ("&#%d;", $ii);
$out .= $ent;
}
}
return $out;
}
function BIG5_string($name){
//判別中文是否能轉換為BIG5碼,若不行則以unicode&#XXXX顯示
$tname=@iconv("utf-8","big5",$name);
if( mb_strlen($name,"utf-8") <> mb_strlen($tname,"big5") )
{
$per_name_big5="";
for($ai=0;$ai < mb_strlen($name,"UTF-8");$ai++)
{
$str_tmp=mb_substr($name,$ai,1,"UTF-8");
$str_tmp_big5=@iconv("utf-8","big5",$str_tmp);
if( mb_strlen($str_tmp_big5,"big5") ==0 )
{
echo "$str_tmp <br>";
$per_name_big5 .= "&#".base_convert(bin2hex(iconv("utf-8", "ucs-2", $str_tmp)), 16, 10);
}
else $per_name_big5 .=$str_tmp_big5;
}
}else $per_name_big5=$name;
return $per_name_big5;
}