Ik maak gebruik van een onhandige API die links codeert als: <u>\\n\\\\*HYPERLINK \\"http://www.youtube.com/watch?v=A0VUsoeT9aM\\"A Youtube Video</u>
Nu wil ik deze links omzetten in normale html links, dat is inmiddels gelukt:
<?php
$string = '<u>\\n\\\\*HYPERLINK \\"http://www.youtube.com/watch?v=A0VUsoeT9aM\\"A Youtube Video</u>';
$pattern = '/http[?.:=\\w\\d\\/]*/';
$namePattern = '/(?:")([\\s\\w]*)</';
preg_match($pattern, $string, $matches);
preg_match($namePattern, $string, $nameMatches);

echo '<a href="'.$matches[0].'">'.$nameMatches[1].'</a>';
?>

Maar die links haal ik niet ergens zomaar vandaan, die staan in een grotere tekst dus wat ik eigenlijk wil is dat voor elke preg_match dat hij alleen dat stukje vervangt en dan de hele tekst output. Een voorbeeldje:
<?php
$input = 'Blablabla bla <u>\\n\\\\*HYPERLINK \\"http://www.youtube.com/watch?v=A0VUsoeT9aM\\"1.A Youtube Video</u> blablabla tekst erna <u>\\n\\\\*HYPERLINK \\"http://www.youtube.com/watch?v=A0VUsoeT9aM\\"2. A Youtube Video</u> blabla bla';
//Wil ik dus veranderen naar:
$output = 'Blablabla bla <a href="http://www.youtube.com/watch?v=A0VUsoeT9aM">1. A Youtube Video</a>blablabla tekst erna <a href="http://www.youtube.com/watch?v=A0VUsoeT9aM">2. A Youtube Video</a> blablabla';
?>
Kan iemand mij ermee helpen?
Het is dat je nog met die // zit aan het einde van de url, anders was een str_replace al genoeg geweest:

<?php
str_replace('<u>\\n\\\\*HYPERLINK \\', '<a href=', $string);
?>

Maar ook als regex is die niet zo moeilijk
<?php
Preg_replace('#<u>\\n\\\\*HYPERLINK \\"([^\\]+)\\"(.*)</u>#U', '<a href="$1">$2</a>', $string);
?>


[size=xsmall]Toevoeging op 30/03/2014 20:46:31:[/size]

Oh,
En misschien die backslashes allemaal ook nog escapen
En _all toevoegen.

Geeft die api trouwens die vervuiling of zitten er magic quotes in de weg, of escape je zelf ook nog onbewust een keer?

[size=xsmall]Toevoeging op 31/03/2014 09:54:22:[/size]

<?php
$string = 'abc <u>\\n\\\\*HYPERLINK \\"http://www.youtube.com/watch?v=A0VUsoeT9aM\\"A Youtube Video</u> xyz';
$string .= 'klm <u>\\n\\\\*HYPERLINK \\"http://www.youtube.com/watch?v=A0VUsoeT9aM\\"A Youtube Video</u> pqr';
$string .= '444 <u>\\n\\\\*HYPERLINK \\"http://www.youtube.com/watch?v=A0VUsoeT9aM\\"A Youtube Video</u> 999';
echo htmlspecialchars($string);
echo '<br>';

$u = preg_replace('#<u>.*\*HYPERLINK\s+\\\\"(.+)\\\"(.+)</u>#U', '<a href="$1">$2</a>', $string);

echo htmlspecialchars($u);
?>

Reageren