PHP $_POST ne prend pas les accents
Cette question est résolue, vérifier ma réponse pour voir la solution
Je suis en train d'ajouter à ma DB un texte avec des lettres accentuées par le biais d'un formulaire html qui soumet POST à une page PHP, le problème est que les lettres accentuées sont convertis en caractères illisibles.
J'ai cette forme:
<form action="page.php" method="POST">
<input type="textarea" id="text1" name="text1" />
<input type="submit" value="Send" />
</form>
Et puis, dans page.php:
echo $_POST['text1'];
Le problème est que si je saisie àèìòù
dans mon textarea puis-je soumettre le formulaire, j'obtiens ce résultat:
à èìòù
Ma prochaine étape serait de convertir les lettres accentuées en entités html avec htmlentities($_POST['text1']
mais j'ai besoin de $_POST
de me donner les lettres correctes.
Remarque: dans la page de tête j'ai déjà
<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" />
Comment puis-je résoudre ce problème?
MODIFIER
J'ai essayé avec
<form action="page.php" method="POST" accept-charset="UTF-8">
<input type="textarea" id="text1" name="text1" />
<input type="submit" value="Send" />
</form>
Et il n'a pas le résoudre
EDIT 2
Aussi essayé avec l'ajout de
<meta charset='utf-8'>
à mon document, dans la tête, et il ne fonctionne pas
MODIFIER 3
J'ai essayé avec la configuration de mon charset en UTF-8 sur la deuxième page, et
echo $_POST['text1'];
affiche le résultat correct.
J'ai vu que le problème est que j'ai deja utiliser htmlentities, avec ce code
echo htmlentities($_POST['text1']);
- Je obtenir
à èìòù
Qui, de fait, sorties
à èìòù
même si j'ai mis charset dans mon meta-balises d'en-tête et trop. Quelqu'un sait-il comment puis-je le résoudre?
Probablement devrait lire: Le Minimum Absolu que Tout Développeur Doit Absolument, Positivement Savoir Sur Unicode et les Jeux de Caractères.
stackoverflow.com/questions/4696499/...
Ah, je vois le problème. Vous n'avez pas un encodage sur votre page de sortie.
Vous devez toujours spécifier l'encodage. Le meilleur moyen est d'envoyer un en-tête HTTP et le mettre dans le HTML. L'en-tête, s'il est présent, est utilisé lors de l'utilisation de HTTP. Le HTML est utilisé lors du chargement du HTML sans HTTP, par exemple, à partir d'un disque en tant que fichier. Et oublier le
accept-charset
, il ne sera pas vous aider, parce que le navigateur envoie des formes dans l'encodage de la page, qui était déjà en UTF-8 dans votre cas.OriginalL'auteur BackSlash | 2013-04-19
Vous devez vous connecter pour publier un commentaire.
Je vais aller dans l'autre sens - ajouter à votre code PHP
<?php header("Content-Type: text/html; charset=utf-8"); ?>
. Évite d'avoir des balises meta (que certains navigateurs hasard ignorer...)De l'encodage de la représentation que vous avez fourni, PHP est l'écho d'une codé en UTF-8 chaîne, tandis que votre navigateur est en supposant que la sortie va être ISO-8859-1. Paramètre d'en-tête fera tous navigateurs comprendre que l'UTF-8 est prévu, à condition qu'ils en avaient sous Accept-encoding. s'ils ne le faisaient pas, ils vont le barf, mais je sais seulement d'un "moderne" navigateur qui ne le sont pas, et il est d'environ 0,2% du marché.
Notez que vous aurez besoin de lancer cette ligne première, avant toute autre sortie (ou vous pouvez en sortie de la mémoire tampon du lot, ce qui rend la vie plus facile, mais les drains un peu plus de mémoire)
L'épiphanie. S'applique uniquement pour linux et même alors, je ne sais pas si ça a été corrigé sur ce point.
Vous savez que le code HTML de la balise meta ne s'applique que si le serveur ne prend pas en envoyer un en-tête HTTP? Certains serveurs ne sont pas par défaut, les autres ne spécifiez un type de contenu par défaut et l'encodage, qui désactive toutes les
<META>
en HTML.Pourquoi pensez-vous que je l'ai suggéré de jeter un en-tête pour ne pas avoir à vous soucier de meta tags et de certains navigateurs hasard de les ignorer? 🙂
OriginalL'auteur Sébastien Renauld
Ok, j'ai enfin résolu. Même si j'ai été paramètre charset, peu importe si le réglage avec PHP header
ou avec le HTML de la balise meta
et l'enregistrement de mon fichier en UTF-8, ça ne fonctionne pas.
Entrer
àèìòù
puis de la traiter avechtmlentities
était toujours résultant dansQue, dans "lisible" des personnages, est:
Je viens de changer cela:
:
et tout a fonctionné, je reçois ma véritable entrée imprimés.
Merci à vous tous pour votre aide!
OriginalL'auteur BackSlash