[PHP] str_replace

Fermé
rasteda Messages postés 34 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 3 mai 2010 - 20 déc. 2009 à 12:13
vladivostok Messages postés 228 Date d'inscription samedi 6 septembre 2008 Statut Membre Dernière intervention 8 février 2010 - 20 déc. 2009 à 14:04
Bonjour,

Je débute en programmation PHP et j'ai un petit souci avec un de mes codes.

je souhaite remplacer des balises dans une variable, en l'occurence <span style="font-weight: bold;"> par <b> et une autre balise </span> par </b>.
j'ai donc écris le code ci-dessous mais ca n'a pas l'air de fonctionner:

$contenu = "<span style="font-weight: bold;">Bonjour</span>";

$obalise1 = "<span style="font-weight: bold;">";
$nbalise1 = "<b>";
$contenu = str_replace($obalise1, $nbalise1, $contenu);

$obalise2 = "</span>";
$nbalise2 = "</b>";
$contenu = str_replace($obalise2, $nbalise2, $contenu);

A priori je me complique la vie non ?
Merci de me donner un petit coup de main
A voir également:

4 réponses

vladivostok Messages postés 228 Date d'inscription samedi 6 septembre 2008 Statut Membre Dernière intervention 8 février 2010 20
20 déc. 2009 à 12:19
Il faut que tu utilise les expression régulière. je t'expliquerai cela juste après manger c'est compliquer quand on voit mais en fait c'est tout simple et c'est super puissant.
0
vladivostok Messages postés 228 Date d'inscription samedi 6 septembre 2008 Statut Membre Dernière intervention 8 février 2010 20
20 déc. 2009 à 13:05
Voilà comme je te l'ai dit au dessus je te conseil donc d'utiliser les expressions régulière.

Un expression régulière s'écrit en php sous la forme #ton expression#
Bien entendu elle peut aussi être utiliser dans les requête MYSQL mais dans ce cas elle s'écrit sous la forme 'ton expression'

Ainsi une expression régulière te permet de créer ton propre BBCode par exemple.

prenons pour exemple le BBCode normale avec la balise [b] et [/b]
si on regarde bien cela fonctionne de la même manière que ton truc.

on utilise une fonction qui permet de remplacer une expression qui coïncide avec une expression régulière par une autre.

ainsi on utilise la fonction preg_replace

reprenons :

Pour le moment ton code ressemble a sa :

$texte = preg_replace('#ton expression#', , $texte)
Le but est maintenant de savoir après quoi tu va remplacer le [b] et le [/b] tu va en fait le remplacer par <b> et </b> donc tu va utiliser la fonction tel quel :

$texte = preg_replace('#ton expression#', '<strong>$1</strong>', $texte)

En fait si on analyse pour le moment la variable texte passe dans ton expression régulière.
Ensuite si elle détecte que ton expression se retrouve dans ton code elle remplace par du code html.

la variable $1 est en fait créer lorsque tu utilise une parenthèse dans ton expression régulière.

ainsi tu sait d'hors et déjà que l'expression aura une parenthèse donc on peu l'écrire comme ceci :
#...(.+)...#

ensuite ce que l'on cherche ce sont les balises [b] et [/b]
donc le bbcode devrai ressembler a cela :

#[b](.+)[/b]# or [ et ] sont des caractère qui signifie quelque chose dans une expression régulière il faut donc les échapper :

#\[b\](.+)\/b\#

Voilà tu viens de finir ta première regexp ou expression régulière.

Pour que cela marche bien comme il faut il faut que tu rajoute juste derrière ta regexp isU cela signifie qu'il ne prend pas en compte la casse et tout plein d'autres choses qui sont difficile a expliquer.

ainsi pour finir :

$texte = preg_replace('#\[b\](.+)\/b\#isU', '<strong>$1</strong>', $texte);

voilà a quoi ressemble le code php qui permet de remplacer les balises [b] par <strong> c'est du BBCode.

Sur la même base tu peu écrire tout un langage même autre chose que du BBCode traditionnel qui est légèrement gavant.

si tu as des questions pose les, je tacherai d'y répondre.
0
rasteda Messages postés 34 Date d'inscription dimanche 20 décembre 2009 Statut Membre Dernière intervention 3 mai 2010 1
20 déc. 2009 à 13:23
Super !!!
Bon comme tu le dis dans ton précédent message:
"c'est compliquer quand on voit ..."
Faut que je relise tout ca calmement et sans paniquer :-)
En fait le problème que j'ai à l'origine c'est un problème d'interprétation de flash qui interprète mal les balises span et tout un tas d'autres choses.
J'utilise un RTE pour formater mon texte, je souhaite donc modifier les balises pour les rendre compréhensible par flash. je ne comprends d'ailleurs pas pourquoi avec un RTE on ne peut pas avoir des balises simples comme <b>, <font face="Arial"> ...
donc je comprends (enfin pas encore :-) ce que tu m'expliques mais sur une phrase plus compliquée type:
<font style="font-weight: bold; font-family: arial; color: rgb(255, 102, 0);" size="3">Bonjour</font>
ca devient super chaud pour écrire <b><font face="Arial" color="#535387" size="12">Bonjour</font></b>.

Bref je vais relire ce que tu me préconises et faire des tests.
En tout cas merci beaucoup.

PS: si quelqu'un connait un RTE facilement exploitable avec flash, merci de me passer l'info ;-)
0
vladivostok Messages postés 228 Date d'inscription samedi 6 septembre 2008 Statut Membre Dernière intervention 8 février 2010 20
20 déc. 2009 à 14:04
Qu'est ce que tu entends par RTE et puis si tu as la moindre question hésite pas il faut juste que tu fasse attention car CCM interprète mal certaine partit du code et le remplace par des liens.

En fait se que je t'ai dit au dessus sert a créer ton propre code BBCode avec les fonction personnaliser que tu veut je ne sait pas si sa peut vraiment t'aider dans ton cas je vais regarder plus précisément.

Tout ce que je peut te dire c'est qu'avec les expressions régulière tu peut faire des milliers de choses que tu ne pensait même pas possible tel que réécrire des fonctions (je te parle bien sur en php)

par exemple si tu connait htmlspecialchars() la fonction rend inoffensives toutes les balises html mais ne les enlève pas et bien tu peut de la même façon que dans l'exemple précédant réécrire la fonction comme tu le souhaite.

Par exemple moi je l'ai réécrite comme ceci :


<!-- Powered by Vladivostok -->
<!-- Fichier de suppresion des balises html -->

<?php
function supprim($texte)
{
/* Fonction pour enlever les balises html */
$texte = preg_replace('#</?A-Za-z0-9._-+>(.+)+(</A-Za-z0-9._-+>)?#isU', '$1', $texte);

/* On renvoie le texte aprés traitement */
return $texte;
}
?>

<!-- fin du fichier -->


tu le met dans un fichier a part et tu en créer un qui inclue toutes tes fonction comme sa dans ton code tu n'a qu'a inclure qu'une fois la librairie et tout marche.

par exemple partout dans mon code j'ai remplacer htmlspecialchars() par supprim() et c'est ma fonction qui s'exécute.

Je sait que c'est un peu bourrin car j'ai découvert qu'il existait une fonction qui faisait exactement la même chose amis au moins maintenant j'ai ma propre fonction qui marche pas trop mal même plutôt bien et qui me sert beaucoup.

Si tu as la moindre question hésite pas.

PS : je ne sait pas ce qu'est un RTE mais moi j'utilise notepad++ pour créer mon code php.
Comme tu peut le voir au dessus les balises ] et [ sont mal interpréter. il faut en rajouter avant et après les textes qui apparaisse en bleu.
0