it-swarm.com.de

Konvertieren Sie utf8-Zeichen in iso-88591 und zurück in PHP

Einige meiner Skripte verwenden eine andere Codierung, und wenn ich versuche, sie zu kombinieren, ist dies ein Problem.

Ich kann die verwendete Codierung jedoch nicht ändern. Stattdessen möchte ich die Codierung des Ergebnisses in Skript A ändern und sie als Parameter in Skript B verwenden.

Also: Gibt es eine einfache Möglichkeit, einen String in PHP von UTF-8 zu ISO-88591 zu ändern? Ich habe utf_encode und _decode angesehen, aber sie machen nicht das, was ich will. Warum gibt es keine "utf2iso ()" - Funktion oder ähnliches?

Ich glaube nicht, dass ich Zeichen habe, die nicht im ISO-Format geschrieben werden können, also sollte das kein großes Problem sein.

42
qualbeen

Schauen Sie sich iconv() oder mb_convert_encoding() an. Übrigens: Warum arbeiten utf8_encode() und utf8_decode() nicht für Sie?

utf8_decode - Konvertiert eine Zeichenfolge mit ISO-8859-1-Zeichen, die mit UTF-8 codiert sind, in Einzelbyte-ISO-8859-1

utf8_encode - Codiert eine ISO-8859-1-Zeichenfolge in UTF-8

Also im Wesentlichen

$utf8 = 'ÄÖÜ'; // file must be UTF-8 encoded
$iso88591_1 = utf8_decode($utf8);
$iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $utf8);
$iso88591_2 = mb_convert_encoding($utf8, 'ISO-8859-1', 'UTF-8');

$iso88591 = 'ÄÖÜ'; // file must be ISO-8859-1 encoded
$utf8_1 = utf8_encode($iso88591);
$utf8_2 = iconv('ISO-8859-1', 'UTF-8', $iso88591);
$utf8_2 = mb_convert_encoding($iso88591, 'UTF-8', 'ISO-8859-1');

alle sollten dasselbe tun - mit utf8_en/decode(), das keine spezielle Erweiterung erfordert, mb_convert_encoding(), das ext/mbstring erfordert, und iconv(), das ext/iconv erfordert.

118
Stefan Gehrig

Verwenden Sie zunächst keine unterschiedlichen Kodierungen. Es führt zu einem Durcheinander, und UTF-8 ist definitiv das, was Sie überall verwenden sollten.

Möglicherweise ist Ihre Eingabe nicht ISO-8859-1, sondern etwas anderes (ISO-8859-15, Windows-1252). Verwenden Sie zum Konvertieren iconv oder mb_convert_encoding .

Dennoch, utf8_encode und utf8_decode sollte für ISO-8859-1 funktionieren. Es wäre schön, wenn Sie einen Link zu einer Datei oder einem nkodierten oder base64 Beispielstring posten könnten, bei dem die Konvertierung fehlschlägt oder unerwartete Ergebnisse liefert.

6
phihag

Es ist viel besser zu bedienen

$ value = mb_convert_encode ($ value, 'HTML-ENTITIES', 'UTF-8');

Besonders wenn Sie AJAX aufrufen, um 'ISO-8859-1'-Zeichen zu senden. Es funktioniert für Chinesisch, Japanisch, Tschechisch, Deutsch und viele weitere Sprachen.

1
VINAY KANT

setze meta tag in head als

 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

verwenden Sie den Link http://www.i18nqa.com/debug/utf8-debug.html , um das gewünschte Symbolzeichen zu ersetzen.

dann benutze str_replace wie

    $find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash
                        $replace = array('“', '’', '…', '—', '–', '‘', 'é', '', '•', '˜', '”');
$content = str_replace($find, $replace, $content);

Es ist die Methode, die ich benutze und viel helfe. Vielen Dank!

1
user2842936

In meinem Fall waren Dateien mit Namen, die diese Zeichen enthielten, in Filezilla nicht einmal sichtbar, nachdem sie hochgeladen wurden! Im Cpanel-Dateimanager wurden sie mit? (unter schwarzem Hintergrund). Und diese Kombination hat die Anzeige im Browser korrekt gemacht (HTML-Dokument ist westlich codiert):

$dspFileName = utf8_decode(htmlspecialchars(iconv(mb_internal_encoding(), 'utf-8', basename($thisFile['path']))) );
0
user109764

Ich benutzte:

function utf8_to_html ($data) {
    return preg_replace(
        array (
            '/ä/',
            '/ö/',
            '/ü/',
            '/é/',
            '/à/',
            '/è/'
        ),
        array (
            '&auml;',
            '&ouml;',
            '&uuml;',
            '&eacute;',
            '&agrave;',
            '&egrave;'
        ),
        $data 
    );
}
0
tommystyle

Sie müssen das Paket iconv verwenden, insbesondere die Funktion iconv.

0

Verwenden Sie html_entity_decode() und htmlentities().

$html = html_entity_decode(htmlentities($html, ENT_QUOTES, 'UTF-8'), ENT_QUOTES , 'ISO-8859-1');

htmlentities() formatiert Ihre Eingabe in UTF8 und html_entity_decode() formatiert sie zurück in ISO-8859-1.

0
Fernando CR

Ich benutze diese Funktion:

function formatcell($data, $num, $fill=" ") {
    $data = trim($data);
    $data=str_replace(chr(13),' ',$data);
    $data=str_replace(chr(10),' ',$data);
    // translate UTF8 to English characters
    $data = iconv('UTF-8', 'ASCII//TRANSLIT', $data);
    $data = preg_replace("/[\'\"\^\~\`]/i", '', $data);


    // fill it up with spaces
    for ($i = strlen($data); $i < $num; $i++) {
        $data .= $fill;
    }
    // limit string to num characters
   $data = substr($data, 0, $num);

    return $data;
}


echo formatcell("YES UTF8 String Zürich", 25, 'x'); //YES UTF8 String Zürichxxx
echo formatcell("NON UTF8 String Zurich", 25, 'x'); //NON UTF8 String Zurichxxx

Überprüfen Sie meine Funktion in meinem Blog http://www.unexpectedit.com/php/php-handling-non-english-characters-utf8

0
Ignacio Pascual