Soucis d'encodage

Résolu/Fermé
Ysabe_l Messages postés 12575 Date d'inscription vendredi 12 avril 2013 Statut Contributeur Dernière intervention 11 novembre 2024 - 10 oct. 2013 à 20:17
Ysabe_l Messages postés 12575 Date d'inscription vendredi 12 avril 2013 Statut Contributeur Dernière intervention 11 novembre 2024 - 11 oct. 2013 à 12:55
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 !!

A voir également:

2 réponses

JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 10/10/2013 à 21:27
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 -.- ...
0
Ysabe_l Messages postés 12575 Date d'inscription vendredi 12 avril 2013 Statut Contributeur Dernière intervention 11 novembre 2024 276
10 oct. 2013 à 21:58
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.
0
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 10/10/2013 à 22:22
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 ...
0
Ysabe_l Messages postés 12575 Date d'inscription vendredi 12 avril 2013 Statut Contributeur Dernière intervention 11 novembre 2024 276
11 oct. 2013 à 08:41
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.
0
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 11/10/2013 à 12:42
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
}
0
Ysabe_l Messages postés 12575 Date d'inscription vendredi 12 avril 2013 Statut Contributeur Dernière intervention 11 novembre 2024 276
11 oct. 2013 à 12:55
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.
0