Avatar billede dugi Nybegynder
24. april 2005 - 18:03 Der er 13 kommentarer og
1 løsning

Hjælp til preg_replace (link fix)

Hej alle,

Jeg er ikke så god til preg_replace, og jeg er stødt på en fejl som kræver jeres hjælp.

Dette er min kode:
$input = preg_replace('&lt;a href="(.*)"&gt;(.*)&lt;/a&gt;/i', '<a href="\\1" target="_blank">\\2</a>', $input);

Dette er min fejl:
Warning: preg_replace() [function.preg-replace]: Unknown modifier 'g' in C:\Documents and Settings\Morten Rugaard\Dokumenter\Mine Websteder\YourMagFINAL\scripts\misc\replace.php on line 24


Grunden til <> er i HTML kode, er fordi jeg bruger, htmlentities - bare så i ved det ikke er en fejl og ikke kan gøre det anderledes :)


Nogle som kan hjælpe mig med mit problem? :)

På forhånd tusind tak.
MVH Morten
Avatar billede barklund Nybegynder
24. april 2005 - 18:07 #1
Du skal indkapsle din preg i nogle tegn, som starter og slutter selve udtrykket og adskiller udtryk fra modifiers:

$input = preg_replace('#&lt;a href="(.*)"&gt;(.*)&lt;/a&gt;#i', '<a href="\\1" target="_blank">\\2</a>', $input);

Du havde ikke nogen start-slash (men en slut) - og derudover brugte du også slash i dit udtryk, så det er smartere at vælge et andet tegn.
Avatar billede dugi Nybegynder
24. april 2005 - 18:15 #2
Perfekt, nu melder den ikke fejl - men den replacer ikke :/
Kan du mon hjælpe mig, med at få den til det også ? :)
Avatar billede barklund Nybegynder
24. april 2005 - 18:19 #3
Du vil nok gerne skrive:

input = preg_replace('#&lt;a href="(.*?)":*?&gt;(.*?)&lt;/a&gt;#i', '<a href="\\1" target="_blank">\\2</a>', $input);

Så matcher den ikke gready, men går efter mindst muligt.

--
Morten Barklund
Avatar billede dugi Nybegynder
24. april 2005 - 18:23 #4
Det hjalp ingen ting :/
Avatar billede barklund Nybegynder
24. april 2005 - 18:40 #5
Se, nu ved jeg jo ikke, hvad du laver, men hvis jeg skriver:

print preg_replace("#&lt;a href=\"(.*?)\":*?&gt;(.*?)&lt;/a&gt;#i", "<a href=\"\\1\" target=\"_blank\">\\2</a>", "hej her er et &lt;a href=\"flaf.php\"&gt;link&lt;/a&gt;.");

Så får jeg det rigtige resultat. :)
Avatar billede dugi Nybegynder
24. april 2005 - 18:45 #6
jeg har det hele i en function :/

function replace($type, $input)
{
  $input = stripslashes($input);
  $input = htmlentities($input); // Encode the string (remove html tags)
  $input = nl2br($input);
 
  $input = str_replace('&lt;b&gt;', '<span class="bold">', $input);      // <b>
  $input = str_replace('&lt;B&gt;', '<span class="bold">', $input);      // <B>
  $input = str_replace('&lt;/b&gt;', '</span>', $input);                  // </b>
  $input = str_replace('&lt;/B&gt;', '</span>', $input);                  // </B>
  $input = str_replace('&lt;i&gt;', '<span class="italic">', $input);    // <i>
  $input = str_replace('&lt;I&gt;', '<span class="italic">', $input);    // <I>
  $input = str_replace('&lt;/i&gt;', '</span>', $input);                  // </i>
  $input = str_replace('&lt;/I&gt;', '</span>', $input);                  // </I>
  $input = str_replace('&lt;u&gt;', '<span class="underline">', $input);  // <u>
  $input = str_replace('&lt;U&gt;', '<span class="underline">', $input);  // <U>
  $input = str_replace('&lt;/u&gt;', '</span>', $input);                  // </u>
  $input = str_replace('&lt;/U&gt;', '</span>', $input);                  // </U>
  $input = str_replace('&lt;links&gt;', '<span class="links">', $input);  // <u>
  $input = str_replace('&lt;LINKS&gt;', '<span class="links">', $input);  // <U>
  $input = str_replace('&lt;/links&gt;', '</span>', $input);              // </links>
  $input = str_replace('&lt;/LinKS&gt;', '</span>', $input);              // </LINKS>
  $input = preg_replace('#&lt;a href="(.*?)"&gt;(.*?)&lt;/a&gt;#i', '<a href="\\1" target="_blank">\\2</a>', $input);
 
  $input = str_replace('&lt;br&gt;', '<br>', $input);
  $input = str_replace('&lt;BR&gt;', '<br>', $input);
 
  return $input;
}


og der erstatter den ikke :/
Avatar billede barklund Nybegynder
24. april 2005 - 18:57 #7
Prøv med:

$input = preg_replace("#&lt;a href=\"(.*?)\":*?&gt;(.*?)&lt;/a&gt;#i", "<a href=\"\\1\" target=\"_blank\">\\2</a>", $input);

Måske det gør en forskel :)
Avatar billede dugi Nybegynder
24. april 2005 - 19:34 #8
Nope, ingen ting overhovede :(
IHHH kan simpelthen ikke finde fejlen :/
Avatar billede barklund Nybegynder
24. april 2005 - 19:48 #9
Prøv en anden tilgang - nemlig først at fjerne de tilladte tags, formattere teksten og så sætte de tilladte tags ind igen:

function replace($type, $input) {
  $allowed_tags = array("b", "u", "i", "links", "a", "br");
  $input = preg_replace("#<(/?(".join("|",$allowed_tags).").*?)>/i", "[[\\1]]", $input);
  $input = stripslashes($input);
  $input = htmlentities($input);
  $input = nl2br($input);
  $input = preg_replace("#\[\[(/?(".join("|",$allowed_tags).").*?)\]\]/i", "<\\1>", $input);
  return $input;
}

Noget i den stil :)

--
Morten Barklund
Avatar billede barklund Nybegynder
24. april 2005 - 19:53 #10
Ah, nu ved jeg det - dine " bliver jo også lavet om til &quot;

$input = preg_replace('#&lt;a href=&quot;(.*?)&quot;&gt;(.*?)&lt;/a&gt;#i', '<a href="\\1" target="_blank">\\2</a>', $input);
Avatar billede dugi Nybegynder
24. april 2005 - 19:56 #11
nej det gør de ikke - ikke i følge mn kilde :s
Avatar billede dugi Nybegynder
24. april 2005 - 19:58 #12
My god, det virkede :D:D:D:D!
Tusind tak, smid et svar :D
TAK TAK TAK!
Avatar billede barklund Nybegynder
24. april 2005 - 20:05 #13
Helt fint - hvilken version?
Avatar billede dugi Nybegynder
24. april 2005 - 20:15 #14
Den sidste, men da jeg kiggede i kilden var den altså ikke sådan - for jeg C/P kilden ind og erstarttede teksten med (.*?) så det gir ikke særlig meget mening i min verden, men hvad fanden - det virker nu :D!

TAK :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester