Twinflower Skrevet 29. desember 2008 Del Skrevet 29. desember 2008 Ja, nå vil jeg altså lage linker. Si at en bruker skriver et gjestebokinnlegg med en webadresse i, så skal PHP kjenne igjen adressen og lage <a href="adresse">adresse</a>. Jeg har funnet to script som gjør dette, men de fungerer ikke helt optimalt. F,eks blir alt klusset til om det er et linjeskift rett bak adressen. Det må altså være mellomrom foran og bak. Jeg lurer også litt på når jeg skal utføre denne tekst-scannen/endringen. slik ser gjestebokinnlegg-ferden ut: På vei fra bruker til lagring i databasen: ------------------------------------------- $gbin_text = $_POST['text']; //Lagre som "penere" variabel $gbin_text = htmlspecialchars($gbin_text); //Forhindre brukersendte HTML-koder $gbin_text = mysql_real_escape_string($gbin_text); //Forhindre mysql injection *lagre* På vei fra databasen til gjesteboka: ------------------------------------- $gb_text = str_replace($smilies,$images,$gb_text); //(en funksjon jeg har laget som bytter ut smilefjes med smilefjesbilder) $gb_text = nl2br($gb_text); // Gjøre linjeskift om til HTML-linjeskift. *echo* Jeg har mest lyst til å sette søket etter linker på vei ut fra gjesteboken, slik at jeg slipper å lagre gjestebokinnlegget annerledes enn det i utgangspunktet var sendt inn som. Problemet er ofte at hvis en link er slik: www.link.com<br/>, så blander breaken seg inn i linken og lager en skikkelig linke-salat. Det blir litt amatørmessig å ha en gjestebok hvor man må ha mellomrom bak linker før man trykker enter. (Og man vet jo at mange liker å ha webadressene de skriver på en egen linje, eller å trykke enter rett bak). Så, hva er best practice her? Her er forresten den jeg har prøvd: http://www.alt-php-faq.org/local/85/ (ser dere, det er naturlig med et linjeskift bak linker!) PS: Det er 3 typer adresser jeg vil aktivere: www.link.com http://link.com http://www.link.com edit: ser at forumet her ikke aktivere www.link.com-linker. Er det en grunn til det som jeg ikke har tenkt på? Lenke til kommentar
PS_CS4 Skrevet 29. desember 2008 Del Skrevet 29. desember 2008 (endret) Vel, du må nok vente til en her kan du gi deg en regex du kan bruke. Endret 29. desember 2008 av PS_CS4 Lenke til kommentar
itsmebth Skrevet 29. desember 2008 Del Skrevet 29. desember 2008 (endret) preg_replace( '/([a-z]+:\\/\\/[a-z0-9\\-_\\.]+\\/?[^ ]+)/', '<a href="$0" target="_blank">$0</a>', htmlspecialchars($msg) ) Dette er det jeg bruker å lage linker, men den er bare ment for å brukes på en linje av gangen. Jeg kan ikke uten videre komme på en god metode å gjøre det, men dette burde virke (utestet). preg_replace_callback( '/([a-z]+:\\/\\/[a-z0-9\\-_\\.]+\\/?[^ ]+)/', create_function('$m', 'if(($p = strpos("<") === false) return "<a href=\"{$m[0]}\" target=\"_blank\">{$m[0]}</a>";$link = substr($m[0], 0, $p - 1);$rest = substr($m, $p); return "<a href=\"{$link}\" target=\"_blank\">{$link}</a>$rest";', htmlspecialchars($msg) ) Endret 29. desember 2008 av itsmebth Lenke til kommentar
Twinflower Skrevet 29. desember 2008 Forfatter Del Skrevet 29. desember 2008 takk for svar, men jeg fant denne før jeg rakk å lese din: http://www.aurorapod.com/tutorial.php?id=2 Denne funker etter mine erfaringer bra, uansett function autolink($message) { $text = " " . $message; $text = preg_replace("#([\n ])([a-z]+?)://([a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]+)#i", "\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://\\3</a>", $text); $text = preg_replace("#([\n ])www\.([a-z0-9\-]+)\.([a-z0-9\-.\~]+)((?:/[a-z0-9\-\.,\?!%\*_\#:;~\\&$@\/=\+]*)?)#i", "\\1<a href=\"http://www.\\2.\\3\\4\" target=\"_blank\">www.\\2.\\3\\4</a>", $text); $text = preg_replace("#([\n ])([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)?[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $text); $text = substr($text, 1); return($text); } Lenke til kommentar
itsmebth Skrevet 30. desember 2008 Del Skrevet 30. desember 2008 Den du bruker vil feile hvis linken er helt først i meldingen. Lenke til kommentar
Twinflower Skrevet 30. desember 2008 Forfatter Del Skrevet 30. desember 2008 Hvis det er meg du snakker til, vil jeg du skal legge merke til den første linjen i scriptet som setter inn et mellomrom fremst i stringen for å forhindre nettopp slike feil. Mellomrommet blir tatt bort etterpå. Men om du sikter til linken i det første innlegget, så stemmer det du sier. Lenke til kommentar
itsmebth Skrevet 30. desember 2008 Del Skrevet 30. desember 2008 Det er en helt idiotisk metode å gjøre det på. Lenke til kommentar
PS_CS4 Skrevet 30. desember 2008 Del Skrevet 30. desember 2008 Det er en helt idiotisk metode å gjøre det på. Hvorfor det? Det fungerer jo for han/hun.. Lenke til kommentar
itsmebth Skrevet 30. desember 2008 Del Skrevet 30. desember 2008 Det at noe fungerer betyr at det er den beste måten å gjøre det, ei heller at det er en god ide. (se http://en.wikipedia.org/wiki/Kludge#Computer_science_use) Lenke til kommentar
Twinflower Skrevet 30. desember 2008 Forfatter Del Skrevet 30. desember 2008 Hva med å forklare forskjellene, eller i det minste påpeke hvorfor det er idiotisk før du skriker løs i øst og vest? Lenke til kommentar
AlecTBM Skrevet 2. januar 2009 Del Skrevet 2. januar 2009 (endret) Er laga for å gjøre om til bbkode da, men er bare å bytte ut bbkoden til html function autolink($str) { //hente url $url = '/\s((ftp|ftps|http|https):\/\/[a-z0-9~#%@\&:=?\/\.,_-]+[a-z0-9~#%@\&=?;\+\/_-]+)/i'; $pars_to = ' [URL=$1]$1[/URL]'; $pars_raw = preg_replace($url, $pars_to, $str); return $pars_raw; } Resten av scriptet ligger her http://alexander.no-ip.org/script/bbcode.phps Endret 2. januar 2009 av AlecTBM Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå