Comment remplacer (utiliser regex dans PHP5) les caractères invalides dans la chaîne utf-8 sur les caractères espace blanc?PHP: remplacer les caractères invalides dans la chaîne utf-8 dans
Répondre
Cela n'a pas fonctionné pour moi. les caractères invalides sont restés. Tout comme ça n'a pas fonctionné pour bobef. ça ne fait tout simplement pas le boulot. – Rodniko
Cela a fonctionné pour moi. Le fichier source a été téléchargé CSV des codes de franchise SBA, que j'ai formaté manuellement à JSON pour être utilisé dans un semoir Laravel. Mais même si mon fichier formaté a passé la validation JSON, il y avait encore des caractères UTF-8 cachés et invalides dans le fichier que PHP ne pouvait pas décoder. – Ixalmida
Je n'ai pas encore débogué dans les détails mais iconv ainsi que mb_convert ne résolvent pas le problème avec json_encode() Cela peut aider dans de nombreux cas, pas dans tous. – John
Le iconv ne fonctionnait pas mon cas (que d'autres solutions) donc j'ai trouvé le mien ici dans la partie de "validation de caractère":
Avec mbstring vous pouvez faire:
$text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');
Fonctionne comme vous voulez (remplace les caractères invalides par des espaces), mais ne semble pas fonctionner si vous souhaitez remplacer les caractères non valides par quelque chose d'autre, comme ?
.
Voir: Replacing invalid UTF-8 characters by question marks, mbstring.substitute_character seems ignored
Si vous avez rencontré l'erreur maudite « de caractère non valide » en utilisant XML de PHP ou analyseur JSON alors vous pourriez être intéressé.
Malheureusement, les analyseurs XML et JSON de PHP n'ignorent pas les caractères non-UTF8, mais ils arrêtent et lancent une erreur plutôt inutile. J'ai trouvé le formulaire de code ci-dessous net et fonctionne parfaitement pour moi ..
//reject overly long 2 byte sequences, as well as characters above U+10000 and replace with ?
$some_string = preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'.
'|[\x00-\x7F][\x80-\xBF]+'.
'|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'.
'|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'.
'|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/S',
'?', $some_string);
//reject overly long 3 byte sequences and UTF-16 surrogates and replace with ?
$some_string = preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]'.
'|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $some_string);
ne résout pas le problème avec json_encode. il signale aussi un UTF8 valide aussi invalide, malheureusement sans donner d'indice quel est le problème. – John
- 1. Remplacer plusieurs caractères dans une chaîne (XSLT)
- 2. Caractères invalides dans les sources de latex générées dans Doxygen?
- 3. Remplacer les caractères chaîne du tableau
- 4. Comment remplacer les caractères "nouvelle ligne" entre guillemets dans php?
- 5. chaîne remplacer dans un fichier avec php
- 6. Supprimer les caractères d'une chaîne dans C
- 7. Suppression de caractères spécifiques d'une chaîne dans php
- 8. Exemple de chaîne utf8 non valide?
- 9. Strip/remplacer les espaces dans une chaîne
- 10. Comparaison de caractères utf8 PostgreSQL
- 11. Remplacer la chaîne dans le tableau javascript
- 12. Comment remplacer les caractères spéciaux xml manuellement?
- 13. Comment remplacer une variable dans une chaîne avec PHP?
- 14. Problème utf8 avec les caractères suédois de la ligne de commande
- 15. remplacer la correspondance exacte dans php
- 16. Manière optimale de remplacer les caractères dans une grande chaîne avec Python?
- 17. Comment remplacer plusieurs caractères dans SQL?
- 18. PHP Remplacer la couleur dans truecolorimage
- 19. Remplacer les caractères dans le fichier par index
- 20. remplacer les caractères dans un fichier (méthode plus rapide)
- 21. chaîne remplacer la fonction
- 22. PHP - Remplacer couleur dans l'image
- 23. Excel Remplacer tous les caractères trouvés
- 24. en supprimant les caractères étranges de chaîne php
- 25. Comment tirer les 100 premiers caractères d'une chaîne en PHP
- 26. Comment traiter les caractères spéciaux dans une chaîne
- 27. Problèmes IE7 et UTF8 dans l'ASP classique
- 28. Chaîne MySQL remplacer
- 29. Regex pour remplacer la chaîne
- 30. lecture UTF8 caractères en utilisant innerHTML retourne 0xfffd pour tous les caractères
Que voulez-vous faire? se débarrasser des espaces blancs? ou utf-8 caractères? Donnez un exemple. –
se débarrasser des caractères UTF-8 est facile: '$ text = '';'::) – Joey