String nach UTF-8 konvertieren
Autor: Ralf v.d.Mark
eingetragen: Dienstag, 12. Oktober 2010 um 09:14 Uhr (41/2010 Kalenderwoche)
geändert: Mittwoch, 08. März 2023 um 15:16 Uhr (10/2023 Kalenderwoche)
Keywords: Zeichenkonvertierung String Bearbeitung ersetzen replace konvertieren UTF-8UTF8
Kategorien: PHP, UTF-8 / ISO,
Text:
Prüft einen String auf UTF-8-Kompatibilität und versucht, einen String nach UTF-8 zu konvertieren.
Quellcode:
/**
* Versucht, einen String nach UTF-8 zu konvertieren.
*
* @param string $str Zu kodierender String
* @param string $inputEnc Vermutete Kodierung des Strings
* @return string
*/
function force_utf8($str, $inputEnc='WINDOWS-1252')
{
if ($this->is_utf8_compatible($str)) {
// Nichts zu tun.
return $str;
}
if (strtoupper($inputEnc) == 'ISO-8859-1') {
return utf8_encode($str);
}
if (function_exists('mb_convert_encoding')) {
return mb_convert_encoding($str, 'UTF-8', $inputEnc);
}
if (function_exists('iconv')) {
return iconv($inputEnc, 'UTF-8', $str);
} else {
/* SUPER GAU! */
return $str;
}
}
/**
* Prueft einen String auf UTF-8-Kompatibilitaet.
* RegEx von Martin Duerst
* @source http://www.w3.org/International/questions/qa-forms-utf-8.html
* @see http://toscho.de/2009/utf-8-erzwingen/
* @param string $str String to check
* @return boolean
*/
public function is_utf8_compatible($str)
{
return preg_match("/^(
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$/x",
$str);
}