[php] functie in preg_replace

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rfce
  • Registratie: Oktober 2001
  • Laatst online: 26-09-2024

Rfce

Veni, Vidi, Vici

Topicstarter
Ik heb de volgende replacement om een simpele UBB code voor [img]pic[/img] om te zetten naar de daadwerkelijke html code. Zoals hij hier staat is het werkend.

PHP:
1
$bericht = preg_replace("#\\[img\](.*?)\\[/img\]#si", "[img]'\\1'[/img]", $bericht);


Maar ik wil een id eraan toe kennen omdat ik dmv javascript elk plaatje die te groot is wil downscalen.... ik dacht maak van de lokatie een md5 hash, en dan heb je altijd een uniek id (ter plekke).... daarvoor moet ik dus een functie uitvoeren in de preg_replace functie.... even gekeken, en blijkt dat ik de modifier /e toe moet voegen, maar zodra ik dit doe, werkt mijn functie niet meer:


PHP:
1
2
$bericht = preg_replace("#\\[img\](.*?)\\[/img\]#si", "<img id='".md5('\\1')."' src='\\1' 
onLoad='return ReizeImage(id);' border='0'>", $bericht);


zie ik iets over het hoofd?
(parse error, unexpected '<' om regel van de code)

euh...ja


Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
e modifer gebruiken

PHP:
1
2
3
4
<?
$bericht = preg_replace("#\\[img\](.*?)\\[/img\]#sie", "<img id='".md5('\\1')."' src='\\1' 
onLoad='return ReizeImage(id);' border='0'>", $bericht);
?> 


uit me hoofd kan mis zijn (die e is wel goed nu moet je met dat 2e deel gaan kloten)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Gebruik liever preg_replace_callback (), die is wat liever met quotejes en escapen en dat soort rommel.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

4Real schreef op 19 juni 2004 @ 12:37:
e modifer gebruiken

PHP:
1
2
3
4
<?
$bericht = preg_replace("#\\[img\](.*?)\\[/img\]#sie", "<img id='".md5('\\1')."' src='\\1' 
onLoad='return ReizeImage(id);' border='0'>", $bericht);
?> 


uit me hoofd kan mis zijn (die e is wel goed nu moet je met dat 2e deel gaan kloten)
Een modifer geef je aan met "/sie" voor zover ik weet...dus niet met "#sie"...

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 19 juni 2004 @ 13:02:
[...]

Een modifer geef je aan met "/sie" voor zover ik weet...dus niet met "#sie"...
Je kan elke delimeter gebruiken, lees de manual maar eens goed door. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Rfce
  • Registratie: Oktober 2001
  • Laatst online: 26-09-2024

Rfce

Veni, Vidi, Vici

Topicstarter
haha met die werkt het idd goed:

PHP:
1
2
3
4
5
function imgCallback($matches) {
  return "[img]'".$matches[1]."'[/img]";
}

$bericht = preg_replace_callback('#\\[img\](.*?)\\[\/img\]#si', 'imgCallback', $bericht);


thnx....
Een modifer geef je aan met "/sie" voor zover ik weet...dus niet met "#sie"...
Volgensmij kan je elke delimeter gebruiken volgens de manual....

[ Voor 16% gewijzigd door Rfce op 19-06-2004 13:15 ]

euh...ja


Acties:
  • 0 Henk 'm!

Verwijderd

NMe84 schreef op 19 juni 2004 @ 13:12:
[...]

Je kan elke delimeter gebruiken, lees de manual maar eens goed door. :)
Aha, weer wat geleerd, ik gebruik altijd een "/" :)

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

als je 2x hetzelfde plaatje post dan krijg je dus 2x hetzelfde id - dat lijkt me niet handig. Kan je niet beter een tellertje gebruiken?

PHP:
1
2
3
4
5
6
7
8
9
10
11
$i=0;
$news = preg_replace('
    /\\[img\](.*?)\\[\/img\]/ise',
    'imgCallBack(\'$1\',++\$i)',
    $news);

function imgCallBack($src,$i) {

    return '<img id="img'.$i.'" src="'.$src.'" alt="" />';

}


dit kan ook met preg_replace_callback, maar dan moet je $i global maken.

Trouwens; met een md5 loop je de kans dat je ID met een cijfer begint, dat mag dus niet. Voor een JS-scaler functie hoef je trouwens helemaal geen ID toe te kennen aan je images; je kan met document.images of document.getElementsByTagName('IMG') gewoon door al je images heenlopen, en desnoods kan je userimages dan herkenbaar maken met een bepaalde className.
Nog mooier is om gewoon een onload op te nemen in je img-tag zelf:

HTML:
1
<img src="blaat.gif" alt="" onload="checkOfTeGrootIs(this)" />

[ Voor 41% gewijzigd door crisp op 19-06-2004 14:39 ]

Intentionally left blank

Pagina: 1