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.
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.
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.
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);
Vous devez utiliser le iconv paquet, en particulier sa fonction iconv.
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
j'ai utilisé:
function utf8_to_html ($data) {
return preg_replace(
array (
'/ä/',
'/ö/',
'/ü/',
'/é/',
'/à/',
'/è/'
),
array (
'ä',
'ö',
'ü',
'é',
'à',
'è'
),
$data
);
}
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']))) );
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.
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
.
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');
}
}