Soucis d'encodage

Résolu/Fermé
Signaler
Messages postés
11247
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
3 décembre 2021
-
Messages postés
11247
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
3 décembre 2021
-
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.


<?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 !!

2 réponses

Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
227
Salut,

<?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 -.- ...
Messages postés
11247
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
3 décembre 2021
268
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.
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
227
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 ...
Messages postés
11247
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
3 décembre 2021
268
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.
Messages postés
2465
Date d'inscription
mardi 22 janvier 2008
Statut
Membre
Dernière intervention
8 juin 2016
227
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.

function inverser($chaine) {
// Corps de la fonction
}
Messages postés
11247
Date d'inscription
vendredi 12 avril 2013
Statut
Contributeur
Dernière intervention
3 décembre 2021
268
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.