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

Cherche un algo

14 réponses
Avatar
Zouplaz
Bonjour, je cherche un moyen de réaliser l'opération suivante :

J'ai une chaine de texte (champ TEXT de 65535 caractères maxi) formatté en
HTML.

Je cherche un moyen de déterminer si le contenu de ce champ propose des
données affichables ou pas.

Est considéré comme ayant un contenu, toute chaine constituée d'au moins un
caractère alphanumérique en dehors de tout tag HTML et du symbole  

Exemples (les espaces n'utilisant pas d'entities sont remplacés par des #)

1)

<p>
<br />
</p>

Est considéré comme vide

2)

&nbsp;&nbsp;

Est considéré comme vide

3)
#
<br />

Idem



Merci

10 réponses

1 2
Avatar
loufoque
Zouplaz a dit le 05/10/2004 16:10:
J'ai une chaine de texte (champ TEXT de 65535 caractères maxi) formatté en
HTML.

Je cherche un moyen de déterminer si le contenu de ce champ propose des
données affichables ou pas.


Tu veux faire ça en PHP je présume, et non pas en SQL.
Donc tu peux essayer strip_tags(), fonction PHP qui devrait enlever tout
les tags et ne laisser que le contenu, et tu regardes si c'est vide ou pas.

Avatar
Marc


Je cherche un moyen de déterminer si le contenu de ce champ propose des
données affichables ou pas.


- tu peux deja réaliser un strip_tags($txt) et voir ce qu'il en reste.

- d'autre part avec des expressions regulieres tu peux supprimer :
- les lignes vides ou n consécutifs
- ...

Avatar
Olivier Miakinen

Bonjour, je cherche un moyen de réaliser l'opération suivante :

J'ai une chaine de texte (champ TEXT de 65535 caractères maxi) formatté en
HTML.

Je cherche un moyen de déterminer si le contenu de ce champ propose des
données affichables ou pas.

Est considéré comme ayant un contenu, toute chaine constituée d'au moins un
caractère alphanumérique en dehors de tout tag HTML et du symbole &nbsp;


Il y a deux choses à faire. La première (et la plus difficile) est de
repérer les différentes balises ouvrantes et fermantes pour séparer ce
qui est « balisage » (markup) de ce qui est du simple texte. La seconde
(et la plus facile) consiste à extraire les entités du style &amp; ou
&#38; (non alphanumérique) mais aussi &#65; (alphanumérique).


Pour la partie difficile, tu peux peut-être chercher ici :
http://fr2.php.net/manual/fr/print/ref.tidy.php
Par exemple, utiliser tidy_parse_string(), tidy_node->next() et
tidy_node->isText().

Si tu veux le faire toi-même, tout dépend si tu peux rencontrer des ">"
dans les attributs, par exemple <balise attribut=">">. Selon le cas, tu
pourras y arriver simplement ou pas.


Pour la partie facile, je vois comme solution :
1) preg_replace_callback() pour remplacer les entités soit par une
lettre ('A' par exemple) soit par une chaîne vide, selon qu'elles sont
alphanumériques ou pas.
2) preg_match() sur le résultat pour voir s'il contient ou non un
caractère alphanumérique.

Avatar
CrazyCat
Zouplaz wrote:
Bonjour, je cherche un moyen de réaliser l'opération suivante :
J'ai une chaine de texte (champ TEXT de 65535 caractères maxi) formatté en
HTML.
Je cherche un moyen de déterminer si le contenu de ce champ propose des
données affichables ou pas.
Est considéré comme ayant un contenu, toute chaine constituée d'au moins un
caractère alphanumérique en dehors de tout tag HTML et du symbole &nbsp;


Partant du principe que tu es sous mySQL, tu peux utiliser des
expressions régulières avec des requètes du genre:
SELECT ton_texte FROM database REGEXP '[^(<[^>]+>)]^(&nbsp;)^#'
ceci devrait, avec un minimum d'arrangements (je suis pas doué pour les
regexp) te ressortir uniquement "ton_texte" lorsque celui-ci contient du
texte affichable.

--
Tout sur les eggdrops
http://www.c-p-f.org
ML @

Avatar
Cleo
J'ai une chaine de texte (champ TEXT de 65535 caractères maxi) formatté en
HTML.
Si ton document HTML ressemble plutot un doc XHTML, tu peux imaginer

utiliser un parser XML et boucler sur les noeuds du dom pour verifier que
leur contenu n'est pas un text assimilable à vide ...

C'est juste une piste ...
Cléo.

Avatar
Zouplaz
Bin j'ai trouvé tout seul :

function isEmptyHtml($datas)
{
$datas = strip_tags($datas); // Virer les tags html
$datas = str_replace("&nbsp;","",$datas); // Virer les &nbsp;
$datas = str_replace(" ","",$datas); // Virer les espaces

return (strlen($datas) == 0);
}


Ca a l'air de remplir son rôle...
Avatar
Stephane Pineau
Le 05 Oct 2004 14:10:40 GMT, Zouplaz écrivait:

Je cherche un moyen de déterminer si le contenu de ce champ propose des
données affichables ou pas.

Est considéré comme ayant un contenu, toute chaine constituée d'au moins un
caractère alphanumérique en dehors de tout tag HTML et du symbole &nbsp;



Essayer avec :

if (trim(strip_tags(chaine))<>""): echo "chaine affichable"; endif;

Leimotiv habituel... une lecture approfondie de la section "chaines de
caractères" de la doc php permet de résoudre simplement pas mal de fonctions
bêtes et méchantes mais sacrément utiles.

Cdlt,
Stéph'

--
AcroDict : Dictionnaire francophone des acronymes informatiques
<URL:http://www.teaser.fr/~spineau/acrodict/>
PHP Page : Script PHP3 Gratuits (Forum, Gestionnaires BDD, etc..)
<URL:http://steph.pineau.free.fr/php/index.php>

Avatar
GaSPaRD
Tu peux dejà enlever tout les caractères spéciaux, les balises HTML et
le # et ensuite verifier la longueur de la chaine

$ton_text = "..." ;
$sans_tag = strip_tags($ton_texte) ;
$sans_char = html_entity_decode($sans_tag) ;

$text = ereg_replace("[s#]*", "", $sans_char) ;

if (strlen($text) == 0) echo "Rien" ;

Peut être que je me trompe ou que je n'ai pas bien compris :)
Mais sinon j'essaierais dejà de proceder comme ça.

a+
Avatar
Olivier Miakinen
Le 05/10/2004 23:34, j'avais répondu à Zouplaz :

Il y a deux choses à faire. La première (et la plus difficile) est de
repérer les différentes balises ouvrantes et fermantes pour séparer ce
qui est « balisage » (markup) de ce qui est du simple texte. La seconde
(et la plus facile) consiste à extraire les entités du style &amp; ou
&#38; (non alphanumérique) mais aussi &#65; (alphanumérique).

Pour la partie difficile, [...]


Tous les autres ont été unanimes pour conseiller strip_tags() que je ne
connaissais pas. C'est effectivement le mieux.

En revanche, je crois que personne d'autre n'a répondu sur le fait que
tu cherches des caractères alphanumériques uniquement. Tiens, à propos,
tu n'as pas dit si les caractères accentués sont considérés comme
alphanumériques, quelle que soit la langue ?

Avatar
Stephane Pineau
Le 06 Oct 2004 08:30:29 GMT, Olivier Miakinen <om+
écrivait:

En revanche, je crois que personne d'autre n'a répondu sur le fait que
tu cherches des caractères alphanumériques uniquement. Tiens, à propos,
tu n'as pas dit si les caractères accentués sont considérés comme
alphanumériques, quelle que soit la langue ?


Si en plus il faut exclure un certains nombre de caractères ca n'est pas
plus compliqué, il suffit d'utiliser la fonction (de chaines encore) strtr
(d'autres sont possibles) pour convertir tous les caractères non acceptés
en espaces, le trim (ou chop pour enlever d'éventuel caractères spéciaux)
final permettra alors de définir si la chaine est vide ou non.

Avec trois ou quiatres fonctions de chaines on doit pouvoir obtenir le
résultat voulu avec un meilleur temps de réponse (et une meilleure
lisibilité) qu'avec une expressions régulière.

Cdlt,
Stéph'

--
AcroDict : Dictionnaire francophone des acronymes informatiques
<URL:http://www.teaser.fr/~spineau/acrodict/>
PHP Page : Script PHP3 Gratuits (Forum, Gestionnaires BDD, etc..)
<URL:http://steph.pineau.free.fr/php/index.php>

1 2