Så skulle den være der - her kommer et komplet PHP script der konverterer til det format du skal bruge, inkl. en formular med et input-felt, som du kan bruge til at teste med:
<? header("Content-Type: text/html; charset=UTF-8"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
http://www.w3.org/TR/html4/loose.dtd"><html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8">
</head>
<body>
<?
function utf8tounicode_hex($str)
{
$result="";
$pos=0;
while ($pos<strlen($str))
{
$b=ord($str[$pos]);
if ($b<=127) //U+0000-U+007F - Alm. ASCII
{
$result.=tohex_fixedlength($b);
$pos++;
continue;
}
if ($b>=192 && $b<=223) //U+0080-U+07FF - 00000zzz zxxxxxxx <- 110zzzzx 10xxxxxx
{
$b1=ord($str[$pos+1]);
//echo('$b=' . $b . ', $b1=' . $b1 . '<br>');
$z=($b % 32) >> 1;
if ($b1<128 || $b1>192 || $z==0)
die('Ugyldig UTF-8 ved position ' . $pos . ' (' . "$b, $b1" . ')');
$x=($b % 2 ) * 64 + $b1 % 64;
$val=$z*128+$x;
//echo('$z=' . $z . ', $x=' . $x . ', $val=' . $val . '<br>');
$result.=tohex_fixedlength($val);
$pos+=2;
continue;
}
if ($b>=224 && $b<=239) //U+0800-U+FFFF - zzzzzxxx xxxxxxxx <- 1110zzzz 10zxxxxx 10xxxxxx
{
$b1=ord($str[$pos+1]);
$b2=ord($str[$pos+2]);
//echo('$b=' . $b . ', $b1=' . $b1 . ', $b2=' . $b2 . '<br>');
$z=$b % 16 * 2 + (($b1 % 32) >> 5);
if ($b1<128 || $b1>192 || $b2<128 || $b2>192 || $z==0)
die('Ugyldig UTF-8 ved position ' . $pos . ' (' . "$b, $b1, $b2" . ')');
$x=$b1 % 32 * 64 + $b2 % 64;
$val=$z*2048+$x;
//echo('$z=' . $z . ', $x=' . $x . ', $val=' . $val . '<br>');
$result.=tohex_fixedlength($val);
$pos+=3;
continue;
}
}
return $result;
}
function tohex_fixedlength($val, $length=4, $useupper=true)
{
$format='%x';
if ($useupper)
$format='%X';
$result=sprintf($format,$val);
while (strlen($result)<$length)
$result='0' . $result;
return $result;
}
echo $_POST['str'] . ' = ' . utf8tounicode_hex($_POST['str']);
?><br>
<form method="post">
<input type="text" name="str">
<input type="submit" value="Konverter">
</form>
</body>
</html>
Der kan muligvis optimeres lidt hist og her, men det vigtigste er vel at det virker :)
For at bruge funktionen, sender du blot en gyldig UTF-8 streng til den. Det kræver enten at du encoder den (det skulle utf8_encode kunne klare), eller at den side du bruger den på er sat til at bruge UTF-8 - det kan du fortælle browseren ved at smide den øverste linie ind før noget output, såfremt din server ikke allerede er sat op til dette.