2009-07-28 11 views
0

Considérons la chaîne suivante. Son codé en UTF-16-LE et enregistré dans une variable PHP. J'ai échoué à obtenir mbstring ou iconv pour remplacer le ' avec guillemet simple. Ce qui serait un bon moyen de le désinfecter.Conversion PHP UTF-16 en ASCII

Chaîne: Carl Sagan ' Connection Cosmic

+0

Résolu. Utilisé mb_convert_encoding avec juste une petite variation au lieu de UTF-16-LE => UTF-16 et l'encodage de sortie a été mis à l'UTF-8 interne de PHP au lieu de l'ASCII (ISO-8859). – gnosio

Répondre

1

À moins que je suis malentendu à la question, ' est pas une question UTF-16. Cette chaîne a été exécutée sur htmlspecialchars() ou htmlentities() et la citation unique a été convertie en la représentation d'entité html '.

Pour revenir à la normale, vous devez faire un html_entity_decode().

En règle générale, vous ne souhaitez effectuer que le codage html au moment de la sortie afin d'éviter la persistance de ce type de conversion. Si vous utilisez un code HTML pour obtenir ce type de chaînes, vous devez probablement décoder les entités avant de procéder à la conversion et au stockage UTF.

+0

Hey merci pour la réponse, mais il ne le fait pas. Même un simple str_replace refuse de travailler ce qui m'a conduit à la conclusion ci-dessus. – gnosio

+2

La prise en charge de UTF-16 avec les fonctions de chaîne est assez faible. Je suppose que vous allez devoir convertir votre chaîne UTF-16 en un encodage qui peut être géré par html_entity_decode(). Quelque chose comme '$ str = html_entity_decode (iconv ('UTF-16', 'UTF-8', $ str), ENT_QUOTES, 'UTF-8');'. Vous pourriez ensuite revenir en UTF-16 si nécessaire. Je ne suis pas sûr que toutes ces conversions fonctionneront pour vos besoins ou non, mais je sens que vous ne pouvez pas utiliser UTF-16 avec les fonctions de base de la chaîne. – zombat

+0

@zombat, +1 pour l'astuce 'iconv'. C'était exactement ce qui me manquait. – pieman72