Soucis d'encodage
Résolu
Ysabe_l
Messages postés
12723
Date d'inscription
Statut
Contributeur
Dernière intervention
-
Ysabe_l Messages postés 12723 Date d'inscription Statut Contributeur Dernière intervention -
Ysabe_l Messages postés 12723 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je dois réaliser un script php permettant lors de la saisie d'une chaîne de caractères d'avoir la même chaîne à l'envers. J'ai réalisé le script sans grande difficulté mais j'ai un soucis d'encodage de caractères.
La page est bien enregistrée en utf-8 dans notepadd, le charset déclaré dans la page est aussi en utf-8 et le script se lance sur cette unique page.
Après le script si j'affiche la chaîne à l'endroit les caractères accentués sont ok, si je l'affiche à l'envers ils ne sont pas bons.
J'ai tenté de mettre un utf8_encode() sur l'affichage des caractères, même un utf8_decode, mais rien n'y fait.
Si j'enlève la déclaration charset de la page c'est bon pour le script mais c'est alors tout le reste du texte de la page qui perd ses accents.
Je vous copie le code, si quelqu'un peut m'aider à résoudre ce casse tête.
Pour afficher correctement j'ai donc tenté
et
Merci d'avance !!
Je dois réaliser un script php permettant lors de la saisie d'une chaîne de caractères d'avoir la même chaîne à l'envers. J'ai réalisé le script sans grande difficulté mais j'ai un soucis d'encodage de caractères.
La page est bien enregistrée en utf-8 dans notepadd, le charset déclaré dans la page est aussi en utf-8 et le script se lance sur cette unique page.
Après le script si j'affiche la chaîne à l'endroit les caractères accentués sont ok, si je l'affiche à l'envers ils ne sont pas bons.
J'ai tenté de mettre un utf8_encode() sur l'affichage des caractères, même un utf8_decode, mais rien n'y fait.
Si j'enlève la déclaration charset de la page c'est bon pour le script mais c'est alors tout le reste du texte de la page qui perd ses accents.
Je vous copie le code, si quelqu'un peut m'aider à résoudre ce casse tête.
<?php
if(isset($_POST['chaine']))
{
$chaine = $_POST['chaine'];
$longueur = strlen($chaine);
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Exercice sur les chaines de caractères</title>
</head>
<body>
<form method="post" action="chaines.php">
<label for="chaine">Entrez une chaine de caractères</label>
<input type="text" id="chaine" name="chaine" />
<input type="submit" value="Valider" />
</form>
<p>
à l'endroit :
<?php
if(isset($_POST['chaine']))
{
echo $chaine;
$n = $longueur-1;
?>
</p>
<p>
à l'envers :
<?php
while ($n >= 0)
{
echo $chaine{$n};
$n --;
}
}
?>
</p>
</body>
</html>
Pour afficher correctement j'ai donc tenté
echo utf8_encode($chaine{$n});
et
echo utf8_decode($chaine{$n});
Merci d'avance !!
A voir également:
- Le flux d’octets était en erreur par rapport à l’encodage de caractères déclaré. la déclaration d’encodage des caractères était peut être incorrecte.
- Encodage ascii - Guide
- Caractères spéciaux - Guide
- Caractères spéciaux mac - Guide
- Mot de passe de 8 caractères était facile à deviner - Guide
- Caractères spéciaux : comment taper des |—[©\½→}… - Guide
2 réponses
Salut,
Mettez en résolu quand c'est résolu -.- ...
<?php
$original = null;
$reverse = null;
if(isset($_POST['chaine'])) {
$original = trim($_POST['chaine']);
$tmp = utf8_decode($original);
$tmp = strrev($tmp);
$reverse = utf8_encode($tmp);
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Exercice sur les chaines de caractères</title>
</head>
<body>
<form method="post" action="chaines.php">
<label for="chaine">Entrez une chaine de caractères</label>
<input type="text" id="chaine" name="chaine" />
<input type="submit" value="Valider" />
</form>
<?php
if($original != null) echo '<p>à l\'endroit : ' . $original . '</p>';
if($reverse != null) echo '<p>à l\'envers : ' . $reverse . '</p>';
?>
</body>
</html>
Mettez en résolu quand c'est résolu -.- ...
Merci,
ça fonctionne. Par contre faut que je comprenne maintenant, mais pas de soucis pour ça je vais me débrouiller avec la doc.
Merci encore.
ça fonctionne. Par contre faut que je comprenne maintenant, mais pas de soucis pour ça je vais me débrouiller avec la doc.
Merci encore.
De rien.
Il n'y a pas grand chose a comprendre !
L'utf8 est un encodage basé sur plusieurs octets, certaines fonctions PHP ne gèrent pas ce genre d'encodage.
strrev(String Reverse) est une fonction qui sert a inverser une chaîne de caractères, sauf qu'elle ne prend pas en charge les encodages multi-octets, donc c'est pour cela qu'il faut décoder en premier la chaîne, puis l'inverser et enfin la ré-encoder.
Quant au reste, c'est une question d'organisation ...
Il n'y a pas grand chose a comprendre !
L'utf8 est un encodage basé sur plusieurs octets, certaines fonctions PHP ne gèrent pas ce genre d'encodage.
strrev(String Reverse) est une fonction qui sert a inverser une chaîne de caractères, sauf qu'elle ne prend pas en charge les encodages multi-octets, donc c'est pour cela qu'il faut décoder en premier la chaîne, puis l'inverser et enfin la ré-encoder.
Quant au reste, c'est une question d'organisation ...
En fait c'est surtout trim() et strrev() que je ne connaissais pas que je voulais comprendre ;) j'ai lu la doc et j'ai compris, en fait je m'étais "embêtée" à refaire manuellement une fonction qui existait, tout ça parce que le prof nous a dit "les chaines de caractères c'est comme des tableaux" du coup j'ai pas cherché plus loin j'ai traité ça comme un tableau.
Donc double merci, pour la solution au soucis d'encodage et pour ces deux fonctions que je ne connaissais pas.
Donc double merci, pour la solution au soucis d'encodage et pour ces deux fonctions que je ne connaissais pas.
Toujours interroger Google avant de créer quelque chose, surtout des choses que pleins de gens auraient pu y penser avant toi.
Mais d'un autre coté, c'est bien d'essayer de créer, ça t'aide a maîtriser le langage et a gagner en raisonnement.
PS : Généralement les profs demandent de recréer la fonction et non pas d'utiliser ce qui existe déjà, si c'est le cas, alors fait le bien en créant des fonctions.
Mais d'un autre coté, c'est bien d'essayer de créer, ça t'aide a maîtriser le langage et a gagner en raisonnement.
PS : Généralement les profs demandent de recréer la fonction et non pas d'utiliser ce qui existe déjà, si c'est le cas, alors fait le bien en créant des fonctions.
function inverser($chaine) {
// Corps de la fonction
}
En fait il nous demande d'utiliser les fonctions dans l'exercice suivant, donc pour celui là j'ai laissé sans fonction, mais j'ai retravaillé quand même "à ma sauce" histoire de montrer que je n'ai pas bêtement copié ce que tu m'as donné (je me doute que les profs doivent parcourir le net eux aussi ^^) et que j'ai vraiment compris.
Merci encore de ton aide.
Merci encore de ton aide.