PHP: UTF-16 zu UTF-8 konvertieren
Published 2008-09-08, 11:18
Und die zweite Heldentat gleich hinterher:
Eine kleine PHP-Funktion (evtl. unvollständig, bei meinem Anwendungsfall hat es ausgereicht) zum konvertieren von UTF-16-Daten zu UTF-8:
function utf16_to_utf8($str) {
Quelle: http://www.moddular.org/log/utf16-to-utf8
$c0 = ord($str[0]);
$c1 = ord($str[1]);
if ($c0 == 0xFE && $c1 == 0xFF) {
$be = true;
} else if ($c0 == 0xFF && $c1 == 0xFE) {
$be = false;
} else {
return $str;
}
$str = substr($str, 2);
$len = strlen($str);
$dec = '';
for ($i = 0; $i < $len; $i += 2) {
$c = ($be) ? ord($str[$i]) << 8 | ord($str[$i + 1]) :
ord($str[$i + 1]) << 8 | ord($str[$i]);
if ($c >= 0x0001 && $c <= 0x007F) {
$dec .= chr($c);
} else if ($c > 0x07FF) {
$dec .= chr(0xE0 | (($c >> 12) & 0x0F));
$dec .= chr(0x80 | (($c >> 6) & 0x3F));
$dec .= chr(0x80 | (($c >> 0) & 0x3F));
} else {
$dec .= chr(0xC0 | (($c >> 6) & 0x1F));
$dec .= chr(0x80 | (($c >> 0) & 0x3F));
}
}
return $dec;
}
Update:
Manchmal sollte ich erst nachdenken, und dann nach Code googlen. Das hier reicht natürlich auch vollkommen aus und ist sicher besser getestet:
$utf8 = mb_convert_encoding($utf16, 'UTF-8', 'UTF-16LE');
( 1 )
Das ist doch was worauf ich unsere Programmierer mal stoßen sollte. Die reden in der Mittagspause nämlich ausschliesslich über UTF-8 und ich komm nicht mit.
Comment von Wanda am 10. September 2008