Problème avec apostrophe..

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème avec apostrophe..

Re: Problème avec apostrophe..

par lanfeust2 » 07 mai 2015, 00:23

Vraiment un très grand merci :mrgreen:

Re: Problème avec apostrophe..

par Ryle » 06 mai 2015, 00:01

Le problème vient dans la construction de ta balise html. Lorsque tu génères du code html, pense toujours au résultat que tu veux obtenir :
$description = "L'orange";
echo " <meta name='description' content='".$description."' />";
// génère le code html suivant : <meta name='description' content='L'orange' />
La balise content délimitée par des apostrophes considère donc que son contenu s'arrête ici : content='L' ; et que ta balise contient un attribut nommé orange' qu'il ne connait pas et n’interprétera donc pas.

Il te faut soit transformer l'apostrophe en une entité html (afin que la chaine ne soit pas tronquée) :
$description = htmlentities("L'orange", ENT_QUOTES); // htmlentities convertit tous les caractères éligibles en entités HTML
echo " <meta name='description' content='".$description."' />";
// génère le code html suivant : <meta name='description' content='L'orange' />
La valeur de l'attribut content est ainsi bien délimité et n'est plus "coupé" en deux

Autre solution plus simple, délimiter tes attributs avec des guillemets au lieu d'apostrophes :
$description = "L'orange";
echo '<meta name="description" content="' . $description . '" />';
// génère le code html suivant : <meta name="description" content="L'orange" />
Là encore, la valeur de l'attribut est proprement délimitée.

Re: Problème avec apostrophe..

par lanfeust2 » 05 mai 2015, 23:46

Merci, ta méthode fonctionne très bien :priere:

Ce qui m'amène à un nouveau problème... #-o
je recupère la variable pour l'utiliser dans ma balise meta description.

Code : Tout sélectionner

include "fonctions.php"; $description=utf8_encode($line);
Ensuite, dans le fichier fonction j'affiche le header avec un simple echo

Code : Tout sélectionner

echo " <meta name='description' content='".$description."' />";
Seulement, maintenant ça me coupe le texte au niveau de l'apostrophe (pour le référencement si je check mes metas tags avec un outil ou si je check le code source de la page)

Si je modifie dans mon fichier fonction le echo par :
echo utf8_encode("<meta name='description' content='".$description."' />");
Alors j'ai tous les accents en &..

Et si laisse le echo""; dans fonctions.php mais je retire le UTF8 au niveau de mon fichier de base ainsi :

Code : Tout sélectionner

include "fonctions.php"; $description=($line);
Alors j'obtiens dans ? dans un losange...

Bref, j'imagine que je suis pas loin.

Re: Problème avec apostrophe..

par Ryle » 05 mai 2015, 12:48

Bonjour,

Dans ton code, lorsque tu exécutes cette instruction : $line = preg_replace('/(\')/', '', $line);
tu remplaces toutes les apostrophes par une chaine vide. Si tu enlèves cette instruction, tu devrais conserver tes apostrophes :)

Il ne restera alors plus qu'à éventuellement remplacer des " \' " par " ' "
$line = preg_replace("/\\\'/", "'", $line);

Re: Problème avec apostrophe..

par lanfeust2 » 04 mai 2015, 21:35

Désolé pour ma grammaire...

Re: Problème avec apostrophe..

par lanfeust2 » 04 mai 2015, 21:33

Bon alors, si je modifie cette ligne :

Code : Tout sélectionner

$line = preg_replace('(\n|\r|\t)',' ',$line);
par cette ligne :

Code : Tout sélectionner

$line = preg_replace('(\n|\r|\t\')',' ',$line);
Alors j'obtiens bien un espace pour le code html "'"
Et j'obtiens un espace mais tjs ce satané \ pour si c'est codé "L\'orange" ce qui donne "L\ orange"

Bon c'est mieux vu qu'il y a un espace mais j'aimerai bien avoir mon apostrophe....

Problème avec apostrophe..

par lanfeust2 » 04 mai 2015, 21:22

Bonjour,

Voilà, j'essaye de récupérer un texte html et le formater pour obtenir un texte normal mais pour les mots avec apostrophe j'ai ce code html et alors et ça donne ça : "L'orange" --> "Lorange"
Et si j'ai le code html "L\'orange" alors ça donne ça: "L\orange"
J'ai modifié deux fois le cms et les éditeurs d'articles visiblement utilisais pas le même formatage ce qui explique les différences.


Et ci-dessous mon code pour formater le texte.

Code : Tout sélectionner

$line = "".$download->ddescription.""; $line = strip_tags($line); $line = html_entity_decode($line); $line = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $line); $line = preg_replace('~&#([0-9]+);~e', 'chr("\\1")', $line); $line = preg_replace('(\n|\r|\t)',' ',$line); $line = preg_replace('/\s\s+/', ' ', $line); $line = preg_replace('/(\')/', '', $line);
Au final, mon code html est bien formaté en texte sauf pour les apostrophes...