je l'ai fait les choses suivantes:erreur de la fonction PHP htmlspecialchar() lorsque vous essayez d'utiliser la chaîne UTF-8
- J'ai une feuille de calcul avec les données. Une des lignes a un caractère ü. Je sauvegarde ce fichier au format CSV dans OpenOffice.org. Quand il me demande un encodage de caractères, je choisis UTF-8.
- J'utilise Navicat pour créer une table de base de données MySQL, InnoDB avec UTF-8 utf8_general et importer le fichier CSV.
- J'essaie d'utiliser la fonction PHP
htmlspecialchars($string, ENT_COMPAT, 'UTF-8')
où$string
est la chaîne contenant le caractère spécial ü.
Il me donne une erreur: séquence non valide dans l'argument multi-octets. Lorsque je change 'UTF-8'
avec 'ISO8859-1'
, aucune erreur n'est levée, mais le caractère incorrect est affiché. (Le caractère « caractère inconnu », ressemble à <?>
)
Si j'utilise un formulaire HTML pour mettre à jour la chaîne dans la base de données, l'erreur disparaît et le caractère est affiché correctement, mais, quand je regarde alors le record navicat, il semble deux personnages:
[1/4][A with some thing on top of it]
Certains multi-octets qui ne se voit pas comme un character.`
Qu'est-ce qui se passe, où vont les choses mal, et que puis-je faire ?
Selon le journal de requête générale mysql, 'SET NAMES utf8' est réellement envoyé au serveur MySQL. Bien qu'il n'y ait pas de formulaire dans ce processus (il y en a un lorsque je mets à jour l'enregistrement), cela est mis à UTF-8 en utilisant une balise meta HTML. (Mais encore une fois, l'erreur apparaît déjà avant que le formulaire ne soit utilisé.) –
@ Pelle pouvez-vous confirmer qu'il est effectivement envoyé au serveur * pour cette connexion *? Et pour confirmer, l'erreur que vous citez est réellement lancée par 'htmlspecialchars()'? –
Compris. Tout était en UTF-8, SAUF: la connexion lors de l'utilisation de SELECT les données. Mettre SET NAMES UTF8 avant les instructions select l'a corrigé. –