Olen yrittänyt saada foorumiskriptiini mahdollisuuden tehdä linkkejä muille sivustoille. Yritin vähän soveltaa PHP-oppaan yhtä regexpiä tähän tapaan:
$viesti = preg_replace("/\[link=\"(.*?)\"\](.*?)\[\/link\]/", "<a href=\"$1\">$2</a>", $viesti);
Mutta siitä ei tule linkkiä. Mitä minun pitäisi korjata tuossa. Linkin syntaksin olisi tarkoitus olla:
[link="http://ohjelmointiputka.net"]Putka[/link]
<?php $viesti = '[link="http://ohjelmointiputka.net"]Putka[/link]'; $viesti = preg_replace("/\[link=\"(.*?)\"\](.*?)\[\/link\]/", "<a href=\"$1\">$2</a>", $viesti); echo $viesti;
Tuloste:
<a href="http://ohjelmointiputka.net">Putka</a>
Mikäköhän mahtaa olla $viesti:n arvo kun testasit?
Ennen regexpiä:
Testi<br /> [link="localhost"]Localhost[/link]<br /> Testi<br />Testi<br />
Jälkeen:
Testi<br /> [link="localhost"]Localhost[/link]<br /> Testi<br />Testi<br />
Ei siis muutu miksikään
Edit:
Syynä olikin htmlspecialchars-funktio
Muista, että et voi jättää htmlspecialchars-funktiota kokonaan pois, tai sivullesi tulee XSS-tietoturva-aukko. Siksi tuollainen tapa linkkien muuttamiseen ei oikein toimi. Kaikki korvaukset (sekä linkit että tavallisen tekstin htmlspecialchars) olisi hyvä tehdä preg_replace_callback-funktiolla yhdellä kertaa, kuten olen aiemminkin vinkannut. Toinen vaihtoehto on, että kirjoitat lausekkeeseesi "-merkin paikalle ".
Aihe on jo aika vanha, joten et voi enää vastata siihen.