preg_replace() - ich kreigs einfach nicht hin

daryl

Mitglied
Hallo,

ich würde gern durch preg_replace eine URL wie z.B. http://forum.park.de/click.php?ref=33333&uff=444&bnz=ght&text=ght eine URL wie
click_33333,444,ght,ght.html
machen.

Das ganze ist in nem HTML Code - also
Code:
<a href=http://forum.park.de/click.php?ref=33333&uff=444&bnz=ght&text=ght><img src=""></a>
soll zu
Code:
]<a href=click_33333,444,ght,ght.html><img src=""></a>
werden.

Kann mir jemand helfen - ich sitze hier schon ne ganze Weile dran und kriegs einfach nciht gebacken.
Vielen Dank im Voraus...
 
Probier mal Folgendes:
PHP:
<?php

	…
	$string = preg_replace('#http://forum.park.de/click.php\?ref=([0-9]+)&uff=([0-9]+)&bnz=([a-z]+)&text=([a-z]+)#', 'click_\\1,\\2,\\3,\\4.html', $string);
	…

?>
 
Wird leider nix - weiß nicht, ob es daran liegt, dass es innerhalb des HTML-Codes ist oder an etwas anderem, jedenfalls entsteht aus

http://forum.park.de/click.php?ref=249668&site=1707&type=b81&bnb=81



wird dies:
Code:
http://forum.park.de/click.php?ref=249668&site=1707&type=b81=81
ALso eine große Veränderung.
PS: Hab die regulären Ausdrücke auch schon auf Nummern und Zahlen ausgeweitet, wo es nötig ist:
Code:
preg_replace('#http://forum.park.de/click.php\?ref=([0-9]+)&site=([0-9]+)&type=([0-9a-zA-Z_]+)&bnb=([0-9a-zA-Z_]+)#', 'click_\\1,\\2,\\3,\\4.html', $url)
 
Nabend miteinander,

ist es zwingend notwendig, dass es mit preg_replace gemacht wird?
Ich würde da mit [phpf]parse_url[/phpf] und [phpf]parse_str[/phpf] arbeiten:

PHP:
function convert_url($url) {
    $urlinfo = parse_url($url);
    parse_str($urlinfo['query'], $query);
    $query = array_values($query);
    return sprintf('click_%s,%s,%s,%s.html', $query[0], $query[1], $query[2], $query[3]);
}

$url = 'http://forum.park.de/click.php?ref=33333&uff=444&bnz=ght&text=ght';
echo convert_url($url);
// output: click_33333,444,ght,ght.html

$url = 'http://forum.park.de/click.php?ref=249668&site=1707&type=b81&bnb=81';
echo convert_url($url);
// output: click_249668,1707,b81,81.html

Gruß
Marv
 
Das Funktioniert zwar ganz gut - aber leider nicht, wenn man um den Link noch HTML-Code hat. Deshalb hatte ich es mir preg_replace() angedacht, damit eben nur der Link angepasst wird und der restliche HTML-Code unverändert bleibt.
 
Dann würde ich [phpf]preg_replace_callback[/phpf] empfehlen:

PHP:
function convert_url($url) {
    $urlinfo = parse_url($url[1]);
    parse_str($urlinfo['query'], $query);
    $query = array_values($query);
    return str_replace($url[1], sprintf('click_%s,%s,%s,%s.html', $query[0], $query[1], $query[2], $query[3]), $url[0]);
}

$htmlcode  = "<html>\n";
$htmlcode .= "<head>\n";
$htmlcode .= " <title>Meine Homepage</title>\n";
$htmlcode .= "</head>\n";
$htmlcode .= "<body>\n";
$htmlcode .= "<div>\n";
$htmlcode .= " <a href=\"http://forum.park.de/click.php?ref=33333&uff=444&bnz=ght&text=ght\">Ich bin ein Link</a>\n";
$htmlcode .= " <a href=\"http://forum.park.de/click.php?ref=249668&site=1707&type=b81&bnb=81\">Ich genauso</a>\n";
$htmlcode .= "</div>\n";
$htmlcode .= "</body>\n";
$htmlcode .= "</html>";

echo preg_replace_callback('|href="(.*?)"|', 'convert_url', $htmlcode);

/* Output:
<html>
<head>
 <title>Meine Homepage</title>
</head>
<body>
<div>
 <a href="click_33333,444,ght,ght.html">Ich bin ein Link</a>
 <a href="click_249668,1707,b81,81.html">Ich genauso</a>
</div>
</body>
</html>
*/
 
Wie sieht's mit folgendem regulären Ausdruck aus?
Code:
http://forum.park.de/click.php\?ref=([0-9]+)&(?:site|uff)=([0-9]+)&(?:type|bnz)=([0-9a-zA-Z_]+)&(?:bnb|text)=([0-9a-zA-Z_]+)
 
Zurück