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 :/
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; ?>
Kiitos nopeasta vastauksesta!
Miten tuohon saisi vielä lisättyä sen, että linkki katkaistaisiin myös "<br>":ään tai "<br />":ään?
"/>>([^< \n]+)/", "<a href=\"#$1\"> $0 </a>" // ^Eli lisäät tuon
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.
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.
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!
Aihe on jo aika vanha, joten et voi enää vastata siihen.