It was very frustrating to find that PHP has always supported the HSCCS problem that has always been bothering me. But the name is not HK-SCS, but BIG5-HKSCS.
The following is the solution for HK's supplementary character set:
Set the HTML page to UTF-8,
Before writing to the database: iconv('big5-hkscs','utf8', $string)
If you need to convert to UNICODE, use the following function
function String2Unicode($data, $language)
{
$data = nl2br(trim($data));
$data = str_replace('< ;br />',chr(13),$data);
$str = '';
preg_match_all("/[x80-xff]?./",$data,$ar);
debug($ar);
foreach($ar[0] as $v)
{
if($v != '' && $v!=chr(13))
{
$str .= "".utf82unicode(iconv($language,"UTF-8",$v)).";";
}else {
$str .=$v ;
}
}
return $str;
}
function utf82unicode($c) {
switch(strlen($c)) {
case 1:
return ord($c);
case 2:
$n = (ord($c[0]) & 0x3f) << 6;
$n += ord($c[ 1]) & 0x3f;
return $n;
case 3:
$n = (ord($c[0]) & 0x1f) << 12;
$n += (ord($c[1]) & 0x3f) << 6;
$n += ord($c[2]) & 0x3f;
return $n;
case 4:
$n = (ord($c[0]) & 0x0f) << 18;
$n += (ord($c[1]) & 0x3f) << 12;
$n += (ord($c[2]) & 0x3f) << 6;
$n += ord($c[3]) & 0x3f;
return $n;
}
}