Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Linkit foorumilla (PHP)

Hengilö [11.09.2013 17:49:56]

#

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]

samip [11.09.2013 17:53:42]

#

<?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?

Hengilö [11.09.2013 18:08:01]

#

Ennen regexpiä:

Testi<br />
[link=&quot;localhost&quot;]Localhost[/link]<br />
Testi<br />Testi<br />

Jälkeen:

Testi<br />
[link=&quot;localhost&quot;]Localhost[/link]<br />
Testi<br />Testi<br />

Ei siis muutu miksikään

Edit:
Syynä olikin htmlspecialchars-funktio

Metabolix [12.09.2013 12:08:30]

#

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 &quot;.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta