J'utilise PHP pour gérer le texte à partir d'une variété de sources. Je ne prévois pas que ce sera autre chose que UTF-8, ISO-8859-1, ou peut-être WINDOWS-1252. Si c'est autre chose que l'un d'entre eux, je dois juste m'assurer que le texte est transformé en une chaîne UTF-8 valide, même si les caractères sont perdus. Est-ce que l'option // TRANSLIT de iconv résout ce problème? Par exemple, ce code garantirait-il qu'une chaîne peut être insérée en toute sécurité dans un document codé UTF-8 (ou une base de données)?Garantir utf-8 valide en PHP
function make_safe_for_utf8_use($string) {
$encoding = mb_detect_encoding($string, "UTF-8,ISO-8859-1,WINDOWS-1252");
if ($encoding != 'UTF-8') {
return iconv($encoding, 'UTF-8//TRANSLIT', $string);
} else {
return $string;
}
}
Merci beaucoup. Je sais que les développeurs commenteront toujours la lenteur des regex - à quel point devrais-je utiliser ceci dans de grandes boucles avec beaucoup de texte? Par exemple, une boucle qui effectue une itération 200 fois et nettoie le texte de 10 000 caractères à chaque itération. – Brian
Alors que je ne suis pas fan de regex, dans ce cas, il ne devrait pas être si mauvais. Regex devient lent lorsque vous avez des séquences '?'/'*'/'+' Imbriquées ou imbriquées qui peuvent obliger à revenir en arrière en cherchant différentes façons de correspondre. Cela n'arrivera pas dans ce cas. – bobince
Excellent. Donc, lorsque vous utilisez iconv comme décrit ci-dessus, si je spécifie CP1252 comme jeu de caractères d'entrée, et que la chaîne est autre que CP1252 ou ISO-8859-1, elle renvoie une chaîne de sécurité UTF-8, bien que certains caractères puissent être perdus. Est-ce exact? – Brian