Putkan URLintunnistus ei vieläkään selviä kaikesta kummasta, mitä vaikkapa Wikipediassa voi kohdata. Tämä tuli esiin erään koodivinkin kommenteissa.
Ensin on osoite, jossa sulut on merkitty koodeina. Sen pitäisi toimia... Sitten on sulkujen kanssa, ja niistä jälkimmäinen sulku jää pois URLista. Näin käy ainakin kommenttilootassa.
http://en.wikipedia.org/wiki/Closure_
http://en.wikipedia.org/wiki/Closure_
Jos tätä ei ole helppo korjata, täytyy kirjoittajan itse muistaa käyttää noita escape-koodeja. Ne saa muuten kätsästi selaimen osoiteriviltä kutsumalla javascriptin escape-funktiota.
javascript:escape("(~)::(~)")
Tunnistuksessa ongelmana on, millä perusteella sulun voisi helposti tunnistaa osoitteeseen kuuluvaksi. Toisinaan osoitteita kirjoitetaan sulkuihin, esimerkiksi "(ks. http://linkki/)".
Ongelman voi kiertää linkkitagilla: Wikipedia: Closure (computer science).
Hyvä arvaus useimpien osoitteiden kanssa on tietenkin se, että sulun kuuluessa osoitteeseen sitä vastaava sulku on osoitteen sisällä. Kas näin.
http://en.wikipedia.org/wiki/Closure_
(ks. http://linkki/) <- ei kuulu
Tokkopa tuo niin tärkeää on. Täällähän Putkassa moderaattori korjaa sopimattomat sisällöt viesteistä ihan kertomatta miksi :)
Mielestäni tarpeeksi tarkka olisi käsitellä urli välilyöntiin/rivinvaihto asti. Itselläni ainakin tapana tunkea urlin jälkeen vähintään yksi välilyönti/rivinvaihto.
Ei noita sulkuja tarvitse huomioida. Hyvät selaimet antaa aina leikepöydälle osoitetta kopioitaessa linkin oikeassa muodossa, esim. Firefoxilla osoitepalkista tai hiiren toisella linkkiä kopioitaessa tulee juuri se passeli osoite.
Enemmän olisin sitä mieltä, että linkkien näyttäminen tehtäisiin toisin päin: jos linkki tulee tekstinä luettavana näkyviin, niin sitten käsitellään se luettavaksi, %20 muuttuu välilyönniksi jne. – helpompi toteutus kuin miettiä, miten tehdä urlin tunnistus sellaisten merkkien kanssa, jotka eivät saa validissa urlissa esiintyä.
Testi, kopioitu Firefox 3:n osoitepalkista:
http://en.wikipedia.org/wiki/Closure_
edit:
Viimeinen sulkumerkki ei toimi.
Joo, eihän se selain osaa linkkiä ottaa oikein takaisinkaan, jos se lukee foorumin puolella väärin.
Tietenkin sulut voisi tunnistaa, kuten Kopeekka ehdottaa, mutta tällöin mielivaltainen linkki ei toimi säännöllisillä lausekkeilla oikein. Toisaalta sisäkkäiset sulut ovat aika harvinaisia, joten yksi sulkutaso luultavasti riittäisi jo pitkälle.
Oletan, että korvaukseen on käytetty säännöllisiä lausekkeita. Toimisiko tällainen arvausmenetelmä riittävän hyvin?
<?php $m = "-_.%?=&+#a-zA-Z0-9"; # yms. sallitut merkit $linkki_preg = "![a-z]+://([$m]*([(][$m]*[)]?)?/?)+!"; $linkki_preg_replace = '<a href="\\0">\\0</a>'; $viesti = preg_replace($linkki_preg, $linkki_preg_replace, $viesti); ?>
Tuskinpa ihmisiä saa kuitenkaan opetettua käyttämään URL-enkoodattuja osoitteita, kun monet selaimetkaan eivät nykyään niitä näytä.
Hmm, outoa, jos Firefoxissa (Windows) kopioin osoitepalkista esimerkiksi ääkkösiä sisältävän osoitteen, niin sieltä tulee esimerkiksi %C3%84 sen sijaan että tulisi Ä. Toiset selaimet antaa Ä:n. Firefox kuitenkin jättää sulut käsittelemättä, joten nyt pitäisi sitten kait tarkistaa, ovatko sulut sallittuja URLissa vaiko eivät, ja jos ovat, niin missä kohtaa. Ja jos eivät, niin sitten pitää varmaankin heittää bugiraporttia, tai käydä kurkkimassa Bugzillaa.
En taida jaksaa vaivautua.
Tuskin tuossa on mitään kummallista tai bugia FF:n puolesta, ( ja ) merkkejä vaan ei tarvitse minkään syyn takia enkoodata URLeissa.
Nyt Metabolixin ehdotus on hieman muokattuna koekäytössä.
Jos huomaatte linkeissä ongelmia, ilmoittakaa tähän keskusteluun!
Kun yritän kirjoittaa linkkitagien sisään sanan, joka alkaa $-merkillä (esim. ö$testi
ö), linkintunnistaja poistaa sen.
Esimerkki:
[linkki "http://ohjelmointiputka.net"]Tämä on $testi.[/linkki]
Esimerkki toiminnassa:
Onko tämän tarkoitus toimia näin?
Nyt linkintunnistaja ei enää poista $-merkillä alkavia sanoja.
Itse asiassa se ei ennenkään poistanut vaan teki jotain muuta, mutta kuka arvaa, mitä?
Antti Laaksonen kirjoitti:
Itse asiassa se ei ennenkään poistanut vaan teki jotain muuta, mutta kuka arvaa, mitä?
Taisipa korvata sen muuttujan sisällöllä, kuten PHP:ssä on tapana tehdä. Johan tämä Putka tunnetaan. ;)
Linkkitagin ja osoitteiden yhteiskäyttö on toki arveluttavaa, mutta näinköhän nykyinen toimintatapa on järkevä?
[linkki "http://linkki/"]http://teksti/[/linkki]
Esitänpä toisenkin, asiaan liittymättömän toiveen: voisiko hakasulkeille saada oman tagin, vaikkapa [h]-[/h]? [[#91]] ja [[#93]] ovat hankalia kirjoittaa, ja tässäkin viestissä vastaavia merkintöjä on jo yhteensä 18.
Metabolix kirjoitti:
Esitänpä toisenkin, asiaan liittymättömän toiveen: voisiko hakasulkeille saada oman tagin, vaikkapa [h]-[/h]? [[#91]] ja [[#93]] ovat hankalia kirjoittaa, ja tässäkin viestissä vastaavia merkintöjä on jo yhteensä 18.
Ehkäpä [koodi]
-tagin kaltaisen muotoilemattomuuden mahdollistaminen ilman laatikkoa ja sisennyksiä (ts. muun tekstin joukkoon)?
(Ei välttämättä aina yhtä kätevä ominaisuus, mutta mahdollisesti monikäyttöisempi. Tiedä sitten jos tällainen olisi jotain käytäntöä vastaan)
Nähtävästi &-merkkiä ei muuteta muotoon & kuin satunnaisissa tapauksissa, ja esimerkiksi teksti "×" näkyy muodossa "×". Myös linkit kärsivät tästä ongelmasta, eli tämä vie aivan väärään osoitteeseen. Asia tuli ilmi toisessa keskustelussa.
Ihmettelen kyllä miksi selain edes näyttää tuon ilman puolipistettä lopussa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.