Gå til innhold

Hvordan bruke str_replace flere ganger


Anbefalte innlegg

Heisann!

 

Jeg har nå denne koden:

$meld = str_replace("\n", "<br>", $melding);

 

men jeg vil også legge til

[b][/b], [i][/i], [u][/u]!

men hvordan gjør jeg det?

 

prøvde med

$meld = str_replace("\n", "<br>", $melding);
$meld = str_replace("[b]", "<b>", $melding);
$meld = str_replace("[/b]", "</b>", $melding);
osv ...

men det funka dårlig ..

Endret av YaNkEs
Lenke til kommentar
Videoannonse
Annonse

Dette er jo hva det gjør i utgangspunktet, og som trådstarter mener ikke fungerer. Det fungerer jo naturligvis ikke, da $meld bare blir overskrevet hver eneste gang str_replace() kjøres. Strengt tatt er det ikke nødvendig med mer enn en variabel, dvs. du trenger bare $melding, ikke $meld.

 

$melding = str_replace("\n", "<br>", $melding);
$melding = str_replace("[b]", "<b>", $melding);
$melding = str_replace("[/b]", "</b>", $melding);

echo $melding;

Endret av Jonas
Lenke til kommentar

			$Text = preg_replace("(ø)is","ø",$Text);
		$Text = preg_replace("(Ã¥)is","å",$Text);
		$Text = preg_replace("(ø)is","ø",$Text);
		$Text = preg_replace("(æ)is","æ",$Text);

Jeg bruker preg_replace og denne koden funker feet... (ligger i en funksjon)

   function BBCode($Text)

Lenke til kommentar

Hei!

 

Jeg har ikke drevet med str_replace før, og tenkte og begynne med det nå med forbindelse med forum osv jeg har lagd. Men koden printer ingen ting, ikke feilmelding heller. Koden:

$tekst = "[b]TEST![/b][i]LOL!![/i]";

function BBCode($text) {
$tekst = str_replace("[b]", "<b>", $tekst);
$tekst = str_replace("[/b]", "</b>", $tekst);
$tekst = str_replace("[i]", "<i>", $tekst);
$tekst = str_replace("[/i]", "</i>", $tekst);
}

BBCode($tekst);

Har også prøvd med echo forann BBCode.

 

EDIT: Fant feilen! Greide og skrive text istede for tekst :p

Endret av dannyboy_1992_
Lenke til kommentar

Eit lite tips er å ta ein titt på preg_replace funksjonen, denne vil gjøre det lettere å parse bb koder (spesielt når du kommer til ) og du vil kunne motvirke feil på side design som følge av at slutt taggen til f.eks. mangler.

 

$tekst = str_replace("[b]", "<b>", $tekst);
$tekst = str_replace("[/b]", "</b>", $tekst);

// Dette kan erstattest med
$tekst = preg_replace('#\[b\](.*?)\[\/b\]#is', '<b>\\1</b>', $tekst);

Endret av Runar0
Lenke til kommentar

Nå er jo dette et perfekt eksempel på hvor str_replace ikke helt strekker til da. Som Runar0 sier, dersom man kun bruker str_replace risikerer man at brukere ødelegger design og layout ved at tags ikke avsluttes.

Lenke til kommentar
Det er verdt å merke seg hva PHP manualen skriver om dette:

 

If you don't need fancy replacing rules (like regular expressions), you should always use this function (str_replace()) instead of ereg_replace() or preg_replace().

http://no2.php.net/str_replace

 

Er nok sant at \[b\](.*?)\[\/b\] ikkjer er fancy bruk av regex, men det er som eg sa _mye_ smartere enn i søke etter og [ /b] ved hjelp av str_replace.

 

* Prøv å implenter (tittel)[/ url] med str_replace ;)

Endret av Runar0
Lenke til kommentar

Jeg tenkte mest på bruk av enkle bbkoder som , ikke de mer komplekse som du nevner nå :)

 

Posten min var dessuten ment som et tillegg til posten din, ikke som en rettelse til det du sa, hvis du tolket det på den måten.

Lenke til kommentar

Takk for alle svar!

Dette er bare en meldingsfunksjon, og der har jeg ikke tenkt til å ha med bilde eller link!

skal kun ha b, i, u og linjeskifte!

 

Jeg endte opp med å bruke denne:

$melding = str_replace("\n", "<br>", $melding);
$melding = str_replace("[b]", "<b>", $melding);
$melding = str_replace("[/b]", "</b>", $melding);
$melding = str_replace("[i]", "<i>", $melding);
$melding = str_replace("[/i]", "</i>", $melding);
$melding = str_replace("[u]", "<u>", $melding);
$melding = str_replace("[/u]", "</u>", $melding);

mener og huske at jeg prøvde akkurat det der før jeg la ut tråden på forumet, men, men ..

jeg fikk det hvertfall til å funke nå!

 

EDIT: Jeg testa det dere snakka om oppi her, om jeg ikke avslutter en tag så skjer det INGEN ting med designet mitt, det eneste som skjer er at hele meldinga blir bold fra der du setter [ b ] til der meldinga slutter, samme med i og u også!

Endret av YaNkEs
Lenke til kommentar

Synes det er rart at ingen har foreslått å legge det hele i en enkel array (bortsett fra voldern som alle overså :p)

 

$old = array('[b]', '[i]', '[u]', '[/b]', '[/i]', '[/u]');
$new = array('<b>', '<i>', '<u>', '</b>', '</i>', '</u>');
$melding = nl2br(str_replace($old, $new, $melding));

 

Skal allikevel si meg enig i at regular expressions er et bedre valg med hensyn på fleksibilitet her, men hvis det ikke er nødvendig, så er denne kanskje like så grei?

 

Det skal dog sies at jeg heller ville brukt <strong> og <em> enn <b> og <i>... ;)

 

EDIT: Glemte "\n" => <br />... Det finnes alt en funksjon for dette i PHP kalt nl2br (se over)

Endret av Jonhoo
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...