Problème BBCode

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 BBCode

Re: Problème BBCode

par Fre3z69 » 02 janv. 2012, 22:07

déjà fait, ça change rien
$post_texte=code(nl2br(stripslashes(htmlspecialchars($data['post_texte']))));
Merci de ton aide

Re: Problème BBCode

par moogli » 02 janv. 2012, 21:23

faire le nl2br après le bbcode (vu que c'est toi qui le fait c'est pas bien dur de le déplacer ? :) )

@+

Re: Problème BBCode

par Fre3z69 » 02 janv. 2012, 20:57

Eu juste un soucis d'affichage

En fait pour afficher mon code et les retours à la ligne, j'utilise la fonction nl2br(), mais le soucis c'est que ça me met des <br> après les </li>, les </ul>, les </ul> et de même pour <ol> et </ol>

Comment faire pour enlever ses retour chariot SVP?

Merci

Re: Problème BBCode

par Fre3z69 » 02 janv. 2012, 17:23

j'ai simplifié tant pis

j'ai créer une balise [listo] et [/listo]
et pour les <li></li> [*][/*]

ensuite si il s'agit d'une balise [listo] on commence une liste ordonée sinon une simple liste

Voici le script permettant d'interprété cela
$texte=str_replace('[list]', '<ul>', $texte);
$texte=str_replace('[listo]', '<ol>', $texte);
$texte=str_replace('[*]', '<li>', $texte);
$texte=str_replace('[/*]', '</li>', $texte);
$texte=str_replace('[/list]', '</ul>', $texte);
$texte=str_replace('[/listo]', '</ol>', $texte);
Voila, plus de ligne mais fonctionnel

Si vous avez plus simple, je prend

Merci à vous

Cordialement

Re: Problème BBCode

par Fre3z69 » 02 janv. 2012, 16:35

j'ai essayer de séparer les balises

en remplaçant dans un premier temps les balise <ul> et <ol>
ensuite, je traité les liste <li></li>
et je refermer les balise <ul> et <ol> mais en vain

voici ce que j'ai fait, ça m'affiche qu'une ligne seulement, ce qui entre nous me semble normal, car je ne pense pas que ça soit correct:

Code : Tout sélectionner

$texte = preg_replace('`\[list=([a-z0-9A-Z._-]+)](.+?)[*](.+?)\[/list]`isU', '<ol><li>$1</li></ol>', $texte); $texte = preg_replace('`\[list][*](.+?)\[/list]`isU', '<ul><li>$1</li></ul>', $texte);
En fait je pense qu'il faut le faire en plusieurs fois, mais je ne vois pas comment l'agencer.

Merci de votre aide

Cordialement

Re: Problème BBCode

par Ryle » 02 janv. 2012, 13:12

Le principe reste le même pour des listes que pour les autres tags bbcode... Si tu sais remplacer ... par <b>...</b>, tu dois aisément pouvoir remplacer
  • ...
par <ul>...</ul>. De même pour ta liste ordonnée ou tes balises <li> au lieu de [*].

La seule petite difficulté consiste à trouver comment coller des </li> pour avoir un code html valide (pour ceux qui s'en soucient encore)

Re: Problème BBCode

par Fre3z69 » 02 janv. 2012, 00:56

Salutation

Bonne année à tous

Voici que j'ai de nouveau un soucis

En effet, je souhaite créer un bbcode, plus pour apprendre qu'autre chose, mais je pourrais ainsi l'utiliser sur mes site pour la mise en page sans html dans les textarea.)

bref, j'ai longtemps chercher sur le net avant de venir poster ici, et voici le sujet:

J'aimerais savoir comment traiter dans le texte (sur la page qui affiche le résultat d'une requête sql permettant d'afficher un message ou autre) la structure des listes ordonnée ou non ordonnées.

voici à quoi ressemble le bbcode (c le même que phpbb)

Code : Tout sélectionner

liste ordonnée [list=option] [*]liste 1 [*]liste 2 [*]liste 3 [/list] Liste non ordonnée [list] [*]liste 1 [*]liste 2 [*]liste 3 [/list] Ce qui doit m'afficher: liste ordonnée <ol style="option"> <li>liste 1</li> <li>liste 2</li> <li>liste 3</li> </ol> Liste non ordonnée <ul> <li>liste 1</li> <li>liste 2</li> <li>liste 3</li> </ul>
Je sais que je vais devoir utiliser des regex, alors pour vous permettre de comprendre comment je traite mon bbcode, voici le script de ma fonction php

Code : Tout sélectionner

<?php // Fonction  BBcode function code($texte) { //Smileys $texte = str_replace(':D ', '<img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" />', $texte); $texte = str_replace(':lol: ', '<img src="./images/smileys/lol.gif" title="lol" alt="lol" />', $texte); $texte = str_replace(':triste:', '<img src="./images/smileys/triste.gif" title="triste" alt="triste" />', $texte); $texte = str_replace(':frime:', '<img src="./images/smileys/cool.gif" title="cool" alt="cool" />', $texte); $texte = str_replace(':rire:', '<img src="./images/smileys/rire.gif" title="rire" alt="rire" />', $texte); $texte = str_replace(':s', '<img src="./images/smileys/confus.gif" title="confus" alt="confus" />', $texte); $texte = str_replace(':O', '<img src="./images/smileys/choc.gif" title="choc" alt="choc" />', $texte); $texte = str_replace(':question:', '<img src="./images/smileys/question.gif" title="?" alt="?" />', $texte); $texte = str_replace(':exclamation:', '<img src="./images/smileys/exclamation.gif" title="!" alt="!" />', $texte); //Mise en forme du texte //gras $texte = preg_replace('`\[g\](.+)\[/g\]`isU', '<strong>$1</strong>', $texte);  $texte = preg_replace('`\[b\](.+)\[/b\]`isU', '<strong>$1</strong>', $texte);  //italique $texte = preg_replace('`\[i\](.+)\[/i\]`isU', '<em>$1</em>', $texte); //souligné $texte = preg_replace('`\[s\](.+)\[/s\]`isU', '<u>$1</u>', $texte); //alignement justifié $texte = preg_replace('`\[justify\](.+)\[/justify\]`isU', '<div style="text-align:justify;">$1</div>', $texte); //alignement centré $texte = preg_replace('`\[center\](.+)\[/center\]`isU', '<div style="text-align:center;">$1</div>', $texte); //alignement doit $texte = preg_replace('`\[right\](.+)\[/right\]`isU', '<div style="text-align:right;margin:0px;padding:0px;">$1</div>', $texte); //alignement gauche $texte = preg_replace('`\[left\](.+)\[/left\]`isU', '<div style="text-align:left;margin:0px;padding:0px;">$1</div>', $texte); //titre $texte = preg_replace('`\[titre\](.+)\[/titre\]`isU', '<h3>$1</h3>',$texte); //email $texte = preg_replace('`\[email\](.+)\[/email\]`isU', '<a href="mailto:$1">$1</a>',$texte); //image  $texte = preg_replace('`\[img\](.+)\[/img\]`isU', '<img src="$1" border="0">',$texte); //lien $texte = preg_replace("#\[url\]((ht|f)tp://)([^\r\n\t<\"]*?)\[/url\]#sie", "'<a href=\"\\1' . str_replace(' ', '%20', '\\3') . '\" target=\"blank\">\\1\\3</a>'", $texte); $texte = preg_replace("/\[url=(.+?)\](.+?)\[\/url\]/", "<a href=\"$1\" target=\"blank\">$2</a>", $texte); //citation $texte = preg_replace('`\[quote auteur=([a-z0-9A-Z._-]+) \](.+)\[/quote\]`isU', '<div id="quote">Auteur : $1 <br /> $2 </div>', $texte); $texte = preg_replace('`\[quote](.+)\[/quote\]`isU', '<div id="quote">Citation : <br />$1</div>', $texte); //Sploiler $texte = preg_replace('`\[spoiler](.+)\[/spoiler\]`isU', "<dl class=\"codebox\"><span style=\"cursor:pointer;\" onclick=\"var elementmode = this.getElementsByTagName('span');for(var i=0;i<elementmode.length;i++){if(elementmode[i].title == 'Afficher'){elementmode[i].style.display=(!elementmode[i].style.display)?'none':'';}}\"><dt class=\"codebox\">Afficher</dt><span title=\"Afficher\" style=\"display:none;cursor:text;\">$1</span></span></dl>", $texte); //code $texte = preg_replace('`\[code](.+)\[/code\]`isU', '<dl class=codebox><dt class="codebox">Code: <a title="Tout sélectionner" style="cursor:pointer;" onclick=selectCode(this); return false;>Tout sélectionner</a></dt><dd><code>$1</code></dd></dl>', $texte); //etc., etc. //On retourne la variable texte return $texte; } ?>
Merci pour votre aide.

Cordialement

Re: Problème BBCode

par Fre3z69 » 30 déc. 2011, 10:46

Merci à toi

J'ai chercher plus d'une heure sur le web, j'ai même lu sur ce forum, (le code posté plus haut ne sort pas de ma tête, je connais pas assez les regex pour ça.

En tout cas merci pour ton aide, ça fonctionne à merveille.

Cordialement

Re: Problème BBCode

par Elie » 30 déc. 2011, 01:25

En cherchant 5 minutes sur le web.
<?php

$texte = '[url]http://www.awnip.fr[/url]';
$texte = preg_replace("#\[url\]((ht|f)tp://)([^\r\n\t<\"]*?)\[/url\]#sie", "'<a href=\"\\1' . str_replace(' ', '%20', '\\3') . '\" target=\"blank\">\\1\\3</a>'", $texte);
$texte = preg_replace("/\[url=(.+?)\](.+?)\[\/url\]/", "<a href=\"$1\" target=\"blank\">$2</a>", $texte);
echo $texte;

?>

Problème BBCode

par Fre3z69 » 29 déc. 2011, 20:00

Salutation à tous (Bonnes fêtes au passage)

Voici mon problème

J'ai besoin de BBCode, et j'ai un soucis avec le remplacement des URL

En effet, j'aimerais que les code de type:

Code : Tout sélectionner

[url]adresse[/url] [url=adresse]description[/url]
soit remplacer par

Code : Tout sélectionner

<a href="adresse">adresse</a> <a href="adresse">desciption</a>
Voici le regex que j'ai mis en place, mais qui ne remplace rien.

Code : Tout sélectionner

$texte = preg_replace('`\[url\](#[a-zA-Z0-9._/-:]+#i)\[/url\]`isU','<a href="$1" target="_blank">$1</a>',$texte); $texte = preg_replace('`\[url=(#[a-zA-Z0-9._/-:]+#i)\](#[a-zA-Z0-9._/-:]+#i)\[/url\]`isU', '<a href="$1" target="_blank">$2</a>',$texte);
Comment pourrais je faire ceci SVP?

Merci de votre aide

Cordialement