PHP: UTF-16 zu UTF-8 konvertieren

Veröffentlicht am 8.9.2008, 11:18 Uhr

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) {
$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;
}
Quelle: http://www.moddular.org/log/utf16-to-utf8

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');

Diskussion zum Artikel

» Selbst kommentieren

  1. ( 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 by Wanda am 10. September 2008

Sorry, the comment form is closed at this time.


Fatal error: Uncaught Error: Call to undefined function wp_ftr_googlestats() in /www/htdocs/w012bf20/betamode.de/wp-content/themes/betamode/footer.php:19 Stack trace: #0 /www/htdocs/w012bf20/betamode.de/wp-includes/template.php(684): require_once() #1 /www/htdocs/w012bf20/betamode.de/wp-includes/template.php(643): load_template('/www/htdocs/w01...', true) #2 /www/htdocs/w012bf20/betamode.de/wp-includes/general-template.php(84): locate_template(Array, true) #3 /www/htdocs/w012bf20/betamode.de/wp-content/themes/betamode/index.php(43): get_footer() #4 /www/htdocs/w012bf20/betamode.de/wp-includes/template-loader.php(74): include('/www/htdocs/w01...') #5 /www/htdocs/w012bf20/betamode.de/wp-blog-header.php(19): require_once('/www/htdocs/w01...') #6 /www/htdocs/w012bf20/betamode.de/index.php(17): require('/www/htdocs/w01...') #7 {main} thrown in /www/htdocs/w012bf20/betamode.de/wp-content/themes/betamode/footer.php on line 19