j'ai un texte en utf-8 et je veux le décoder, en utilisant utf8_decode()
Mais quand je fais ce que je perds une partie du texte, utf8_decode()
décode la chaîne jusqu'à ce qu'il trouve un personnage –
Une idée pour résoudre ce problème?retourne utf8_decode seulement une partie de la chaîne codée
Répondre
Peut-être iconv peut vous aider
Même résultat avec iconv –
Peut-être –
ne sont pas dans la norme ISO-8859-1? utf8_decode
ne mange que des caractères utf8 qui existent également dans ISO-8859-1.
Vous voudrez probablement quelque chose de similaire à ceci:
$string = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);
Vous pouvez en savoir plus sur iconv dans the documentation. Selon votre utilisation, IGNORE peut être plus utile que TRANSLIT.
Ne fonctionne pas avec les options –
En fonction des commentaires de la documentation, une option de '// TRANSLIT // IGNORE' est également possible, et pour certaines personnes, le problème a été résolu. Je ne l'ai pas testé moi-même, mais ça vaut la peine d'essayer. – EdoDodo
Juste essayé, n'a rien changé mais merci quand même –
†= E2 80 = 1110 0010 1000 0000
Si c'est littéralement ce qui était dans votre texte UTF-8, il pourrait ne pas être UTF-8. Il devrait être suivi par un octet de plus commençant 10 pour être valide. En effet, un octet commençant par 1110 introduit une séquence de trois octets, les octets suivants commençant à 10, pour fournir un total de 16 octets de «charge utile» pour donner le point de code Unicode.
EDIT: Vous avez indiqué le caractère suivant 0x93 = 1001 0011 qui serait valide. La séquence UTF-8 0xE28093 = 0010 00 0000 01 0011 = 0x2013 qui est un EN DASH. Donc, il semble que UTF-8 plausible après tout!
S *** ... Le problème vient peut-être de la manière dont les données ont été enregistrées (j'essaie d'importer depuis une autre base de données qui stocke les chaînes encodées utf8 dans les tables utf8_general_ci sans utiliser MySQL 'SET NOMS 'utf8' sur la connexion, quand je regarde via phpmyadmin je vois les caractères comme ceci: les quipes, tout se passe bien jusqu'à ce que je trouve ce cas avec - séquence ...) –
Pour préciser, ce que j'ai dans le le texte est: '' '' –
Etes-vous sûr que EdoDodo's code ne fonctionne pas?
Essayez de forcer le navigateur à gérer la sortie en tant que iso-8859-1
. Pour ce faire, vous avez besoin d'un fichier encodé en utf8 avec la chaîne (vous en avez besoin, car les éditeurs de texte peuvent utiliser un UTF-8 BOM invisible, et le navigateur peut passer en UTF-8 par rapport à l'ISO-8859-2 défini), et un l'autre avec le code php en encodage ansi (j'utilise Notepad++ juste pour être sûr que l'encodage est correct - il détecte l'encodage du fichier et le montre dans le coin inférieur droit, et vous pouvez aussi convertir les encodages).
donc créer un fichier dans utf-8 encodage appelé utf8.txt avec juste la chaîne:
–
et créer un fichier ANSI codé index.php avec ce contenu:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
$str = file_get_contents('utf8.txt');
echo "iconv(//IGNORE//TRANSLIT): " . iconv("UTF-8", "ISO-8859-1//IGNORE//TRANSLIT", $str) . "<br>\n";
pour les pages Web, je vous recommande fortement d'utiliser toujours l'encodage UTF-8, même si elle est en anglais.
@Serty Vous pouvez essayer 'iconv (" UTF-8 "," UTF-8 // IGNORE ", $ str);' pour filtrer les mauvais caractères. Voir [cet article] (http://webcollab.sourceforge.net/unicode.html) pour plus d'informations. –
Je viens d'essayer ça. Et cela ne supprime pas les caractères problématiques. Et un décodage après coupe la phrase à nouveau:/ –
@Serty J'ai réussi à répliquer l'erreur sur une autre installation de PHP, donc édité la réponse avec la solution possible. –
'utf8_decode' convertit de l'UTF-8 à l'ISO 8859-1. Vous pouvez perdre les caractères qui ne sont pas dans l'ISO 8859-1. – Gumbo
Je sais que je peux perdre des caractères. Mais vous trouvez normal que la moitié du texte après un caractère particulier est perdu bien qu'il ne contienne pas de caractères spéciaux? –
Avec iconv j'obtiens ceci même avec '// IGNORE':' Avis: iconv(): Détecté un caractère illégal dans la chaîne d'entrée' Une idée? –