phpbar.de logo

Mailinglisten-Archive

[php] preg_replace Problem

[php] preg_replace Problem

Yannik Hampe yannik at cipher-code.de
Fre Jan 25 19:32:49 CET 2008



Marcel Kurz wrote:
> Hallo,
>> Da fehlt der "e"-Modifikator!
>> Siehe: http://de3.php.net/manual/de/function.preg-replace.php Example#4 Die
>> Verwendung des Modifikators 'e'
> 
> hab das mal mit dem "e" Modifikator getestet aber irgendwie bekomme ich da
> nur 
> Fehlermeldungen
> 
> 
> $suchmuster = '/href="(.*?)"/e';
> $text = preg_replace($suchmuster, "/href=\"$1".(!stristr("$1","?")? "?" :
> "&")."foo2=bar2\" ", $text);
> 
> was ist flasch ?

Mhh... jetzt wo ich mal genauer hinsehe... Auch mit Syntaxhighlighting 
fällt mir auf, dass dein Code generell nicht viel Sinn macht. Ich 
unterteile mal:
$replacement="/href=\"$1".(!stristr("$1","?")?"?":"&")."foo2=bar2\" ", 
$text);
Nun, was passiert hier? Erstens glaube ich, dass du dir nicht bewusst 
bist, dass php Strings in Anführungszeichen parst. Also
---
$var ='Hello';
echo "$var world"; // --> Hello world
echo "{$var} world"; // --> Hello world
echo '{$var} world'; // --> {$var} world
echo '$var world'; // --> $var world
echo "\$var world"; // --> $var world
---
Weil ich einfach mal vermute, dass bei dir $1 nicht gesetzt ist, 
passiert folgendes:
echo $replacement; // --> /href="foo2=bar2"
Ich glaube, dass dies nicht das ist, woran du dachtest.
Ich glaube du willst von allen Links in deinem Dokument die Zieladresse 
haben. Da gebe ich dir den Tipp, denn ich hier in der Mailingliste am 
laufenden Band verteile und den am laufenden Band niemanden interessiert:
Nimm die DOM. Es ist schneller und richtiger, was du da rausbekommst. 
Dieser Quelltext gibt dir von allen <a>-Tag in deinem String $text, die 
ein Attribut href haben den Inhalt des href-Tags aus:
---
$text = '
<a href="foo.php">link1</a><br>
<a href="foo.php?foo=bar">link2</a><br>';
$xml=new DOMDocument();
$xml->loadHTML($text);
$xpath =new DOMXPath($xml);
$result =$xpath->evaluate('//a[@href]');
foreach($result as $a) echo $a->getAttribute('href'),"\n";
---
> 
> beste grüße
> marcel

Yannik

php::bar PHP Wiki   -   Listenarchive