[PHP] Remplacement + fonction
Résolu/Fermé
Utilisateur anonyme
-
30 sept. 2009 à 21:06
lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 - 2 oct. 2009 à 20:16
lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 - 2 oct. 2009 à 20:16
A voir également:
- [PHP] Remplacement + fonction
- Coco chat remplacement - Accueil - Réseaux sociaux
- Fonction si et - Guide
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
- Easy php - Télécharger - Divers Web & Internet
- Fonction remplacer word - Guide
21 réponses
lewis34
Messages postés
2557
Date d'inscription
samedi 21 juillet 2007
Statut
Membre
Dernière intervention
30 mai 2015
352
30 sept. 2009 à 21:56
30 sept. 2009 à 21:56
mmhhh !! j'ai pas tout compris sur ce que tu voulais faire et sont interêt ??
a tu essayé htmlspecialchars ?
a tu essayé htmlspecialchars ?
si je comprend bien votre question essais de le convertis en entitie html tout d'abord et puis replacer avec la fonction preg_replace('#<balise ..... etc
Squad-G
Messages postés
66
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
25 octobre 2010
5
Modifié par baladur13 le 23/10/2010 à 13:27
Modifié par baladur13 le 23/10/2010 à 13:27
Salut,
Tu peux faire ceci :
$text = preg_replace('#<balise>(.+)</balise>#isU', '$1', $text);
$text = htmlentities($text);
$text = '<div class="code">'.$text.'</div>';
@+ !
Signature non conforme ==> Supprimée
Modération CCM.
Tu peux faire ceci :
$text = preg_replace('#<balise>(.+)</balise>#isU', '$1', $text);
$text = htmlentities($text);
$text = '<div class="code">'.$text.'</div>';
@+ !
Signature non conforme ==> Supprimée
Modération CCM.
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
30 sept. 2009 à 22:23
30 sept. 2009 à 22:23
Regarde du côté de preg_match_all et foreach.
Voici un script que je viens de pondre :
foreach($codes[1] as $code) {
$pattern = '#
$replacement = '<div class="code">'.htmlspecialchars($code).'</div>';
$texte = preg_replace($pattern,$replacement,$texte);
}
echo nl2br($texte);
?></code>Remplace $texte par la variable qui contient ton texte.
La fonction htmlspecialchars s'appliquera à tous les textes entre <code > et </code >.
Voici un script que je viens de pondre :
<?php preg_match_all('#<code>(.+)#i',$texte,$codes);
foreach($codes[1] as $code) {
$pattern = '#
'.$code.'#i';
$replacement = '<div class="code">'.htmlspecialchars($code).'</div>';
$texte = preg_replace($pattern,$replacement,$texte);
}
echo nl2br($texte);
?></code>Remplace $texte par la variable qui contient ton texte.
La fonction htmlspecialchars s'appliquera à tous les textes entre <code > et </code >.
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
1 oct. 2009 à 19:55
1 oct. 2009 à 19:55
Il y a eu un problème avec la balise code sur CCM.
Voilà le script (il suffit de retirer les espaces dans les balises) :
Voilà le script (il suffit de retirer les espaces dans les balises) :
<?php preg_match_all('#< code>(.+)</ code>#i',$texte,$codes); foreach($codes[1] as $code) { $pattern = '#< code>'.$code.'</ code>#i'; $replacement = '<div class="code">'.htmlspecialchars($code).'</div>'; $texte = preg_replace($pattern,$replacement,$texte); } echo nl2br($texte); ?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
1 oct. 2009 à 19:48
1 oct. 2009 à 19:48
Merci de vos réponses ;)
Je teste ça de suite avion-f16.
@Squad-G > si je fais ça, je n'aurais plus le texte se trouvant en dehors des balises "<balise>", donc je ne peux pas faire comme ça
Je teste ça de suite avion-f16.
@Squad-G > si je fais ça, je n'aurais plus le texte se trouvant en dehors des balises "<balise>", donc je ne peux pas faire comme ça
Squad-G
Messages postés
66
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
25 octobre 2010
5
Modifié par baladur13 le 23/10/2010 à 12:06
Modifié par baladur13 le 23/10/2010 à 12:06
Vrai, dans ce cas çi :
$text = htmlentities(preg_replace('#<balise>(.+)</balise>#isU', '$1', $text));
$text = '<div class="code">'.$text.'</div>';
Signature non conforme ==> Supprimée
Modération CCM
$text = htmlentities(preg_replace('#<balise>(.+)</balise>#isU', '$1', $text));
$text = '<div class="code">'.$text.'</div>';
Signature non conforme ==> Supprimée
Modération CCM
Utilisateur anonyme
1 oct. 2009 à 20:11
1 oct. 2009 à 20:11
J'aime bien l'idée du htmlentities() autour du preg_replace, mais ça ne fonctionne toujours pas, le texte placé autour de <balise></balise> est aussi remplacé, sinon j'ai testé la méthode de avion-f16, et je penses que je vais réussir à faire quelque chose avec ça, mais si quelqu'un a une idée pour faire ça sans boucle c'est vrai que ce serait plus simple (et plus rapide) ^^
Squad-G
Messages postés
66
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
25 octobre 2010
5
Modifié par baladur13 le 23/10/2010 à 12:06
Modifié par baladur13 le 23/10/2010 à 12:06
Inverse mon entities, et au lieu de <balise> tu aura
^^
EDIT: grrrrr........ met les entités HTML déjà encodé & l t; et & g t ; sans les espaces ...
Signature non conforme ==> Supprimée
Modération CCM
<balise>
^^
EDIT: grrrrr........ met les entités HTML déjà encodé & l t; et & g t ; sans les espaces ...
Signature non conforme ==> Supprimée
Modération CCM
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
1 oct. 2009 à 20:21
1 oct. 2009 à 20:21
EDIT: grrrrr........ met les entités HTML déjà encodé & l t; et & g t ; sans les espaces ...
Si c'est à moi que tu t'adresses, je connais assez bien CCM pour savoir que ça ne fonctionne pas (déjà essayé) ;)
Si c'est à moi que tu t'adresses, je connais assez bien CCM pour savoir que ça ne fonctionne pas (déjà essayé) ;)
Utilisateur anonyme
1 oct. 2009 à 20:47
1 oct. 2009 à 20:47
Heu... question peut-être con, mais que veux tu dire par "Inverse mon entities" ?
Squad-G
Messages postés
66
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
25 octobre 2010
5
Modifié par baladur13 le 23/10/2010 à 12:07
Modifié par baladur13 le 23/10/2010 à 12:07
Bon, comme les cractères sont encodés ici, je t'ai fait s en photo : http://gi-001.guestimage.com/132f3e07475cde53d1923464f7ba9179.png
Signature non conforme ==> Supprimée
Modération CCM
Signature non conforme ==> Supprimée
Modération CCM
Utilisateur anonyme
1 oct. 2009 à 21:13
1 oct. 2009 à 21:13
Je ne vois pas trop ou tu veu en venir Squad-G, à partir du moment ou il y a un htmlentities sur la balise $text, tout le texte sera transformé en entitées html, pas seulement ce qui est contenu entre <balise> et </balise>
Merci quand même pour ton aide ;)
Merci quand même pour ton aide ;)
lewis34
Messages postés
2557
Date d'inscription
samedi 21 juillet 2007
Statut
Membre
Dernière intervention
30 mai 2015
352
1 oct. 2009 à 21:16
1 oct. 2009 à 21:16
je doit etre fatigué car j'ai toujour pas compris l'interet de ton truc ???
deja dans ton code tu defini $balise_name='balise' alors que tu recherche <balise>..???
si je te suis d'apres ton 1er post
Blablabla ... exemple :
tu veut faire un htmlentities sur $var ....?
ben tout simplement comme ça
deja dans ton code tu defini $balise_name='balise' alors que tu recherche <balise>..???
si je te suis d'apres ton 1er post
Blablabla ... exemple :
<?php $var = 'inutile'; Texte totalement <?php echo $var; ?>. ?> blablabla...
tu veut faire un htmlentities sur $var ....?
ben tout simplement comme ça
Blablabla ... exemple : <?php $var = 'inutile'; Texte totalement <?php echo htmlentities($var); ?>. ?> blablabla...
Utilisateur anonyme
1 oct. 2009 à 21:18
1 oct. 2009 à 21:18
je ne veux pas faire un htmlentities sur $var, mais sur le texte contenu entre <balise> et </balise>, mais sans toucher au texte directement, donc en utilisant une fonction tel que preg_replace()
Squad-G
Messages postés
66
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
25 octobre 2010
5
Modifié par baladur13 le 23/10/2010 à 12:07
Modifié par baladur13 le 23/10/2010 à 12:07
Tous cas, voici ce que j'utilise pour le BB Code et s amarche à merveille :
Signature non conforme ==> Supprimée
Modération CCM
function Create_My_BBCode( $String ) { GLOBAL $Smilies_List; /* Text */ // [b]Bold[/b] $String = preg_replace( '/\[b\]((\s|.)+?)\[\/b\]/', '<strong>\\1</strong>', $String ); // [i]Italic[/i] $String = preg_replace( '/\[i\]((\s|.)+?)\[\/i\]/', '<i>\\1</i>', $String ); // [u]Underline[/u] $String = preg_replace( '/\[u\]((\s|.)+?)\[\/u\]/', '<u>\\1</u>', $String ); // [size=4]Text[/size] $String = preg_replace( '/\[size=([1-7])\]((\s|.)+?)\[\/size\]/i', '<span style="font-size:\\1;">\\2</span>', $String ); // [font=Arial]Text[/font] $String = preg_replace( '/\[font=([a-zA-Z ,]+)\]((\s|.)+?)\[\/font\]/i', '<span style="font-family:\\1;">\\2</span>', $String ); // [color=blue]Text[/color] $String = preg_replace( '/\[color=([a-zA-Z]+)\]((\s|.)+?)\[\/color\]/i', '<span style="color:\\1;">\\2</span>', $String ); // [color=#ffcc99]Text[/color] $String = preg_replace( '/\[color=(#[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9])\]((\s|.)+?)\[\/color\]/i', '<span style="color:\\1;">\\2</span>', $String ); /* URL */ // [url=http://www.example.com]Text[/url] $String = preg_replace( '/\[url=([^()<>\s]+?)\]((\s|.)+?)\[\/url\]/i', '<a href="\\1">\\2</a>', $String ); // [url]http://www.example.com[/url] $String = preg_replace( '/\[url\]([^()<>\s]+?)\[\/url\]/i', '<a href="\\1">\\1</a>', $String ); /* Pictures */ // [img]http://www/image.gif[/img] $String = preg_replace( '/\[img\](http:\/\/[^\s\'"<>]+(\.(jpg|gif|png)))\[\/img\]/i', '<img alt="" title="" src="\\1" />', $String ); // [img=http://www/image.gif] $String = preg_replace( '/\[img=(http:\/\/[^\s\'"<>]+(\.(gif|jpg|png)))\]/i', '<img alt="" title="" src="\\1" />', $String ); reset( $Smilies_List ); while (list( $BBCode, $URL ) = each( $Smilies_List )) { $String = str_replace( 'B_'.$BBCode , '<img alt="" title="" src="Images/Smilies/'.$URL.'.png" />' , $String ); $String = str_replace( $BBCode , '<img alt="" title="" src="Images/Smilies/'.$URL.'-Small.png" />' , $String ); } return $String; }
Signature non conforme ==> Supprimée
Modération CCM
lewis34
Messages postés
2557
Date d'inscription
samedi 21 juillet 2007
Statut
Membre
Dernière intervention
30 mai 2015
352
1 oct. 2009 à 21:25
1 oct. 2009 à 21:25
ben pourqoui tu met <balise>..?
met plutot | pour signaler ta conversion et ensuite strpos et strrpos, tu recupere les indice de debut et de fin et tu remplace, c'est plus simple et plus rapide de chercher 1 caractere plutot qu'une chaine.
Tu aura le rang de ta premiere occurence de | (strpos) et celui de ta dernière (strrpos)
tu remplace entre le rang x et le rang y
met plutot | pour signaler ta conversion et ensuite strpos et strrpos, tu recupere les indice de debut et de fin et tu remplace, c'est plus simple et plus rapide de chercher 1 caractere plutot qu'une chaine.
Tu aura le rang de ta premiere occurence de | (strpos) et celui de ta dernière (strrpos)
tu remplace entre le rang x et le rang y
lewis34
Messages postés
2557
Date d'inscription
samedi 21 juillet 2007
Statut
Membre
Dernière intervention
30 mai 2015
352
1 oct. 2009 à 21:41
1 oct. 2009 à 21:41
tiens un code tapé en 2/2
tu t'embete plus avec des prg_replace..
pourquoi faire simple quand on peut faire compliqué ;-)
<?php $texte='Texte interprété, <a href="lien">Lien<a>, affichera une lien, <b>ceci sera en gras</b> |signale qu\'il faut convertir le texte en entité html| Blablabla ... exemple :'; $debut=strpos($texte,'|'); $fin=strrpos($texte,'|'); echo ' la chaine a convertir commence au rang<b>'.$debut.'</b> et se termine au rang<b> '.$fin.'</b><br/>'; $remplace=substr($texte,$debut,$fin); $remplace=htmlentities($remplace); $new_texte_deb=substr($texte,$debut-1); $new_texte_fin=substr($texte,$fin+1); $chaine_final=str_replace('|',' ',new_texte_deb.$remplace.$new_texte_fin); //on vire le separateur echo $chaine_final; ?>
tu t'embete plus avec des prg_replace..
pourquoi faire simple quand on peut faire compliqué ;-)
Squad-G
Messages postés
66
Date d'inscription
vendredi 25 juillet 2008
Statut
Membre
Dernière intervention
25 octobre 2010
5
Modifié par baladur13 le 23/10/2010 à 12:05
Modifié par baladur13 le 23/10/2010 à 12:05
La raison pour le quel un regex est meilleur est qu'il utilise moins de ressource au niveau de PHP, car il est rationnel.
Signature non conforme ==> Supprimée
Modération CCM
Signature non conforme ==> Supprimée
Modération CCM
Utilisateur anonyme
2 oct. 2009 à 17:25
2 oct. 2009 à 17:25
Merci à tous pour vos réponses, je pense que je vais reprendre soit la méthode de lewis34 soit celle de avion-f16 :)
@lewis34 > pourquoi je met "<balise>" ? mettre un "|" serait certe plus rapide, mais si j'ai un "if( ($machin==machin)||($truc==truc) )" dans le code à convertir, ça ne fonctionnera pas super...
@lewis34 > pourquoi je met "<balise>" ? mettre un "|" serait certe plus rapide, mais si j'ai un "if( ($machin==machin)||($truc==truc) )" dans le code à convertir, ça ne fonctionnera pas super...
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
2 oct. 2009 à 17:27
2 oct. 2009 à 17:27
J'ajoute qu'avec "ma" méthode, tu peux facilement intégré un « Syntax Highlighter » comme GeSHi.
lewis34
Messages postés
2557
Date d'inscription
samedi 21 juillet 2007
Statut
Membre
Dernière intervention
30 mai 2015
352
2 oct. 2009 à 20:16
2 oct. 2009 à 20:16
je t'ai mis | comme ça tu peut mettre # aussi...
et puis tes conditions faut les faire avant d'inserer tes variables en utilisant par exemple la concaténation, tu t'embeteras moins, faut pas les mettre au milieu de tes valeurs à insérer..
et puis tes conditions faut les faire avant d'inserer tes variables en utilisant par exemple la concaténation, tu t'embeteras moins, faut pas les mettre au milieu de tes valeurs à insérer..
Utilisateur anonyme
2 oct. 2009 à 17:38
2 oct. 2009 à 17:38
D'ailleurs, par rapport à la coloration syntaxique, si le code à colorer contient seulement du php, vaut-il mieux utiliser la fonction highlight_string() ou un outil tel que GeSHi ?
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
2 oct. 2009 à 17:46
2 oct. 2009 à 17:46
highlight_string suffira amplement.