Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

php / expression regulieres et tinymce

6 réponses
Avatar
Anthony
Je suis confronté à un truc qui m'hallucine... mais peut être que
quelques esprits éclairés y verront mieux que moi.

J'ai une fonction qui supprime les paragraphes vide (de type <p> </p>).

Je suis pas fortiche en expression régulière mais ça donne ça :

$texte=eregi_replace('<p>[[:space:]]*</p>','',$texte);

Je récupère des infos dans une base.

Si l'info a été insérée manuellement dans la base... ma fonction
"fonctionne" très bien lorsque je la récupère (excusez le jeu de mot).

Par contre, si je rentre l'info avec tinymce (l'éditeur WYSIWYG), ça ne
fonctionne pas... et c'est de lui dont j'ai besoin.

Le pire, c'est que si je fait un mélange des deux (ajout depuis tinymce
puis manuellement)... seules disparaissent les balises créees manuellement.

Dans le source final j'ai une petite nuance... mais fait la voir :

ICI SEULEMENT LES BALISES TINY :

<p> </p> <- balise transmise par tiny
<p> </p> <- balise transmise par tiny
<p> </p> <- balise transmise par tiny
<p> </p> <- balise transmise par tiny
</div>

ICI LE MELANGES DES DEUX :

<p> </p> <- balise transmise par tiny
<p> </p> <- balise transmise par tiny
<p> </p> <- balise transmise par tiny
<p> </p> <- balise transmise par tiny
<p> </p></div> <- balise insérée à la main

On constate seulement que tiny m'ajoute un retour à la ligne dans le
code (\n je suppose).

Si quelqu'un peut m'aider...

Anthony

6 réponses

Avatar
Christophe Bachmann
>
J'ai une fonction qui supprime les paragraphes vide (de type <p> </p>).

Je suis pas fortiche en expression régulière mais ça donne ça :

$texte=eregi_replace('<p>[[:space:]]*</p>','',$texte);

Je récupère des infos dans une base.

Si l'info a été insérée manuellement dans la base... ma fonction
"fonctionne" très bien lorsque je la récupère (excusez le jeu de mot).

Par contre, si je rentre l'info avec tinymce (l'éditeur WYSIWYG), ça ne
fonctionne pas... et c'est de lui dont j'ai besoin.

Le pire, c'est que si je fait un mélange des deux (ajout depuis tinymce
puis manuellement)... seules disparaissent les balises créees manuellement.



Est-ce que vos balises crées par l'éditeur contiennent bien une espace,
ou s'agit-il d'un quelconque caractère blanc mais codé différemment ?
--
Greetings, Salutations,
Guiraud Belissen, Château du Ciel, Drachenwald,
Chris CII, Rennes, France
Avatar
Olivier Miakinen
Bonjour,

Le 24/04/2009 15:58, Anthony a écrit :
Je suis confronté à un truc qui m'hallucine... mais peut être que
quelques esprits éclairés y verront mieux que moi.

J'ai une fonction qui supprime les paragraphes vide (de type <p> </p>).

Je suis pas fortiche en expression régulière mais ça donne ça :

$texte=eregi_replace('<p>[[:space:]]*</p>','',$texte);

Je récupère des infos dans une base.

Si l'info a été insérée manuellement dans la base... ma fonction
"fonctionne" très bien lorsque je la récupère (excusez le jeu de mot).

Par contre, si je rentre l'info avec tinymce (l'éditeur WYSIWYG), ça ne
fonctionne pas... et c'est de lui dont j'ai besoin.



Je n'ai peut-être pas tout compris de tes explications, mais si je
devine bien il est possible que ton éditeur insère un caractère blanc
non pris en compte par [:space:].

Il me semble que les caractères en questions (du moins dans la locale
par défaut) soient les suivants :
- espace " "
- saut de page "f"
- saut de ligne "n"
- retour chariot "r"
- tabulation horizontale "t"
- tabulation verticale "v"

Si ça se trouve, le caractère inséré par ton éditeur est une espace
insécable ("xa0" en ISO-8859-*)

Et donc, si jamais ma boule de cristal est en état et que ton charset
est par exemple ISO-8859-1, tu peux essayer :
$texte=eregi_replace('<p>[[:space:]xa0]*</p>','',$texte);

Voire, pour maîtriser un peu plus et en supposant que tu ne risques pas
d'avoir un saut de page ou une tabulation verticale :
$texte=eregi_replace('<p>[ nrtxa0]*</p>','',$texte);
Avatar
Patrick Mevzek
Le Fri, 24 Apr 2009 13:58:58 +0000, Anthony a écrit:
Je suis confronté à un truc qui m'hallucine... mais peut être que
quelques esprits éclairés y verront mieux que moi.

J'ai une fonction qui supprime les paragraphes vide (de type <p> </p>).

Je suis pas fortiche en expression régulière mais ça donne ça :

$texte=eregi_replace('<p>[[:space:]]*</p>','',$texte);

Je récupère des infos dans une base.

Si l'info a été insérée manuellement dans la base... ma fonction
"fonctionne" très bien lorsque je la récupère (excusez le jeu de mot).

Par contre, si je rentre l'info avec tinymce (l'éditeur WYSIWYG), ça ne
fonctionne pas... et c'est de lui dont j'ai besoin.



Pas sûr que cela vous aide, mais êtes vous sûr à 100% que ce sont les
mêmes espaces dans les deux cas ? Pour avoir eu le problème (dans un
contexte complétement différent), êtes-vous sûr de ne pas avoir des
&nbsp; dans un cas et pas dans l'autre, et ces derniers ne sont pas
nécessairement attrapés par [[:space:]] (à vérifier dans la
documentation).

Sinon, à défaut un contournement par correspondance négative, du genre
[^a-z0-9]
(à adapter)
peut solutionner le problème aussi, mais c'est plus ou moins satisfaisant.

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
<http://www.dotandco.net/> <http://www.dotandco.com/>
<http://www.dotandco.net/ressources/icann_registrars/prices>
<http://icann-registrars-life.dotandco.net/>
Avatar
Anthony
Olivier Miakinen a écrit :

Je n'ai peut-être pas tout compris de tes explications, mais si je
devine bien il est possible que ton éditeur insère un caractère blanc
non pris en compte par [:space:].

Il me semble que les caractères en questions (du moins dans la locale
par défaut) soient les suivants :
- espace " "
- saut de page "f"
- saut de ligne "n"
- retour chariot "r"
- tabulation horizontale "t"
- tabulation verticale "v"

Si ça se trouve, le caractère inséré par ton éditeur est une espace
insécable ("xa0" en ISO-8859-*)

Et donc, si jamais ma boule de cristal est en état et que ton charset
est par exemple ISO-8859-1, tu peux essayer :
$texte=eregi_replace('<p>[[:space:]xa0]*</p>','',$texte);

Voire, pour maîtriser un peu plus et en supposant que tu ne risques pas
d'avoir un saut de page ou une tabulation verticale :
$texte=eregi_replace('<p>[ nrtxa0]*</p>','',$texte);



Merci de votre aide.
Mes pages sont en utf8.
J'ai donc essayé avec :
eregi_replace('<p>[ nrtxa0x20]*</p>','',$texte);

mais pas moyen, les <p> </p> ne sont pas supprimés.
je ne suis pas sûr pour le x20 mais il me semble que c'est l'espace
insécable codé en utf8.

bien à vous,

Anthony
Avatar
Olivier Miakinen
Le 27/04/2009 14:39, Anthony m'a répondu :

[...]

Si ça se trouve, le caractère inséré par ton éditeur est une espace
insécable ("xa0" en ISO-8859-*)





La première chose à faire, et j'aurais probablement dû l'écrire, c'est
quand même de vérifier ce qu'il y a *vraiment* dans ce texte.

[...]



Merci de votre aide.
Mes pages sont en utf8.
J'ai donc essayé avec :
eregi_replace('<p>[ nrtxa0x20]*</p>','',$texte);



En UTF-8, xa0 n'a aucune chance d'être pris pour une insécable. Note au
passage que [:space:] n'avait pas plus de chances de marcher...

<cit. http://www.miakinen.net/vrac/charsets/?pr0>
Codage UTF-8 : C2 A0
</cit.>

Donc :
eregi_replace('<p>([ nrt]|xc2xa0)*</p>','',$texte);

je ne suis pas sûr pour le x20 mais il me semble que c'est l'espace
insécable codé en utf8.



Que ce soit en ASCII, en ISO-8859-* ou en UTF-8, x20 représente une
espace normale (sécable). D'ailleurs tous les caractères présents dans
ASCII se codent à l'identique dans tous les ISO-8859-* et dans UTF-8 ;
c'est au delà de x7f que ça se gâte.
Avatar
Anthony
Olivier Miakinen a écrit :

Donc :
eregi_replace('<p>([ nrt]|xc2xa0)*</p>','',$texte);




Bon, j'ai tenté et ça ne marche toujours pas.
Un grand merci pour les conseils...
J'ai donc suivi le conseil de Patrick... je sais c'est moins propre mais
ça fonctionne et j'ai déjà pas mal/trop passé de temps dessus.

j'ai donc utilisé : eregi_replace('<p>([^A-Za-z0-9])*</p>','',$texte);

déduction inverse.

anthony