String nach UTF-8 konvertieren

edit | delete

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.


siehe auch: php.watch

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