Convertir utf8-caractères EN iso-88591 et de retour en PHP

certains de mes scripts utilisent un encodage différent, et quand j'essaie de les combiner, cela devient un problème.

mais je ne peux pas changer l'encodage qu'ils utilisent, à la place je veux changer l'encodage du résultat du script A, et l'utiliser comme paramètre dans le script B.

alors: y a-t-il un moyen simple de changer une chaîne de caractères de UTF-8 à ISO-88591 en PHP? J'ai regardé utf_encode et _decode, mais ils ne font pas ce que je veux. Pourquoi il n'y a pas de fonction "utf2iso ()", ou similaires?

Je ne pense pas que j'ai des caractères qui ne peuvent pas être écrits en format ISO, donc ça ne devrait pas être un gros problème.

40
demandé sur mat 2008-12-17 15:40:49

10 réponses

regardez iconv() ou mb_convert_encoding(). Juste en passant: pourquoi ne pas utf8_encode() et utf8_decode() travail pour vous?

utf8_decode - Convertit une chaîne avec ISO-8859-1 caractères encodés avec UTF-8 à un octet ISO-8859-1

utf8_encode - code ISO-8859-1 chaîne de caractères UTF-8

Donc essentiellement

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

tous devraient en faire de même avec utf8_en/decode() ne nécessitant aucune extension spéciale, mb_convert_encoding() nécessitant ext / mbstring et iconv() nécessitant ext / iconv.

109
répondu Stefan Gehrig 2011-06-13 20:26:40

tout d'abord, n'utilisez pas des encodages différents. Il conduit à un désordre, et UTF-8 est certainement celui que vous devez utiliser partout.

il y a des Chances que votre entrée ne soit pas ISO-8859-1, mais autre chose (ISO-8859-15, Windows-1252). Pour convertir à partir de ceux, utiliser iconv ou mb_convert_encoding.

néanmoins,utf8_encode et utf8_decode devrait fonctionner pour ISO-8859-1. Il serait bien si vous pouviez poster un lien vers un fichier ou un uuencode ou base64 exemple chaîne pour laquelle la conversion échoue ou donne des résultats inattendus.

5
répondu phihag 2016-04-28 12:59:39

définir meta tag dans head comme

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

Utilisez le lien http://www.i18nqa.com/debug/utf8-debug.html pour remplacer le caractère de symboles que vous voulez.

puis utiliser str_replace

    $find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash
                        $replace = array('“', '’', '…', '—', '–', '‘', 'é', '', '•', '˜', '”');
$content = str_replace($find, $replace, $content);
1
répondu user2842936 2014-01-24 13:48:58

Vous devez utiliser le iconv paquet, en particulier sa fonction iconv.

0
répondu Martin v. Löwis 2008-12-17 12:56:21

j'utilise cette fonction:

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

découvrez ma fonction dans mon blog http://www.unexpectedit.com/php/php-handling-non-english-characters-utf8

0
répondu Ignacio Pascual 2015-04-22 23:16:28

j'ai utilisé:

function utf8_to_html ($data) {
    return preg_replace(
        array (
            '/ä/',
            '/ö/',
            '/ü/',
            '/é/',
            '/à/',
            '/è/'
        ),
        array (
            '&auml;',
            '&ouml;',
            '&uuml;',
            '&eacute;',
            '&agrave;',
            '&egrave;'
        ),
        $data 
    );
}
0
répondu Luís Cruz 2015-04-22 23:18:17

dans mon cas après que des fichiers contenant des noms contenant ces caractères ont été téléchargés, ils n'étaient même pas visibles avec Filezilla! Dans Cpanel filemanager ils ont été montrés avec ? (sous fond noir). Et cette combinaison fait elle s'affiche correctement sur le navigateur (document HTML est de l'Ouest-codé:

$dspFileName = utf8_decode(htmlspecialchars(iconv(mb_internal_encoding(), 'utf-8', basename($thisFile['path']))) );
0
répondu user109764 2016-11-30 22:21:46

Il est beaucoup mieux d'utiliser

$valeur = mb_convert_encode($valeur,'HTML-ENTITÉS','UTF-8');

spécialement lorsque vous utilisez L'appel AJAX pour la soumission des caractères' ISO-8859-1'. Il fonctionne pour le Chinois, Le Japonais, Le tchèque, l'allemand et beaucoup plus de langues.

0
répondu VINAY KANT 2017-06-21 08:34:19

Utiliser html_entity_decode() et htmlentities().

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

htmlentities() formate vos entrées dans UTF8 et html_entity_decode() formate it back to ISO-8859-1.

0
répondu Fernando CR 2017-10-14 19:02:02
function parseUtf8ToIso88591(&$string){
     if(!is_null($string)){
            $iso88591_1 = utf8_decode($string);
            $iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $string);
            $string = mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8');       
     }
}
-1
répondu user1786647 2012-12-07 12:53:55