Gå til innhold

[Løst]Lage linker av bruker postede tekster med webadresser i


Anbefalte innlegg

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
Videoannonse
Annonse

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 av itsmebth
Lenke til kommentar

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

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

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 av AlecTBM
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...