Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP - Linkin teko

gamehouse [26.08.2011 19:29:17]

#

Terve!
Miten saisin tehtyä tietyistä tekstinpätkistä linkin PHPllä?
Esimerkkiteksti:

blah
>>12345
blah

Ja tuosta pätkästä ">>12345" pitäisi saada tehtyä linkki jonka osoitteena on kyseinen numerosarja.
Siis:

<a href="#12345"> >>12345 </a>

Eli linkki alkaa aina ">>" ja päättyy välilyöntiin tai rivinvaihtoon.
Vastaavia "viittauksia" voi olla monta.

Olen itse yrittänyt jotain, mutta tulosta ei ole syntynyt :/

Antti Laaksonen [26.08.2011 19:35:14]

#

Voit muodostaa linkit säännöllisellä lausekkeella:

<?php
$teksti = "blah\n>>12345\nblah";
$uusi = preg_replace("/>>([^ \n]+)/", "<a href=\"#$1\"> $0 </a>", $teksti);
echo $uusi;
?>

gamehouse [26.08.2011 19:52:24]

#

Kiitos nopeasta vastauksesta!
Miten tuohon saisi vielä lisättyä sen, että linkki katkaistaisiin myös "<br>":ään tai "<br />":ään?

Grez [26.08.2011 19:53:44]

#

"/>>([^< \n]+)/", "<a href=\"#$1\"> $0 </a>"
//     ^Eli lisäät tuon

Metabolix [26.08.2011 19:54:09]

#

Antin koodissa on nyt hieno ominaisuus, jota kutsutaan XSS-aukoksi. (Toki jos syötettä muokkaa vain ylläpitäjä, ei ole varsinaista vaaraa, mutta tulokset voivat silti olla odottamattomat.)

Jos tarkoitus on tunnistaa vain numerosarjat, kannattaisi laittaa säännölliseen lausekkeeseen hakasulkurakenteen tilalle vain \d tai hakasulkuihin 0-9. Jos halutaan lisäksi sallia kirjaimet, kannattaa luetella nekin hakasuluissa.

Grez [26.08.2011 19:55:41]

#

Itse kylläkin oletin, että tuo >>jadajada sisältävä tavara ei olisi käyttäjien tuottamaa, jolloin ei olisi XSS-aukkoa.

Ja tosiaan voihan siihen kuitenkin rajoittaa vain ne merkit mitä oikeasti tarvitaan. Jos ihan oikeasti käyttäjien antamia linkkejä on tarkoitus muuttaa linkeiksi, niin sitten pitäisi varmaan toimia myös http:// alkuiset jne, eli hyväksyttävän parserointi menee hieman mutkikkaammaksi.

gamehouse [26.08.2011 19:59:45]

#

Metabolix kirjoitti:

...kannattaisi laittaa säännölliseen lausekkeeseen hakasulkurakenteen tilalle vain \d tai hakasulkuihin 0-9...

Kiitos Metabolix!
Laitoin \d hakasulkujen tilalle ja nyt toimii ihan niinkuin ajattelinkin!

Vastaus

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

Tietoa sivustosta