webForumDet fria alternativet

Skriva om hemsideadress som länk.

PHP

9 svar · 571 visningar · startad av dude

Medlem sedan aug. 2002386 inlägg
Frågan#1

hello!
Fixar en gästbok med php och mysql, när någon skriver in en hemsideadress eller mailadress vill jag att det automatiskt blir en länk av det.

Alltså, någon skriver sin mail hej@hej.com, då känner programmet av det och skriver ut <a href="mailto: hej@hej.com">hej@hej.com</a>

Ja... ni fattar nog... tacksam för hjälp!!!!

Medlem sedan jan. 20021 122 inlägg
#2

Detta åstadkommer du mha av regular expressions, dvs preg_* funktionerna.
Du kan detektera en mailadress såhär:

$pattern = "[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+(\.[a-zA-Z]{2,4})+";

Sedan får du ersätta i text med preg_replace.
Jag har för mig att jag skrev en pattern för urler för nån vecka sedan, sök på preg_ här i forumet.

Medlem sedan juni 20006 031 inlägg
#3

Detta hittar url'er som börjar med http eller www

$text = preg_replace( '/(?<!"|href=|href\s=\s|href=\s|href\s=)(http|ftp|https):\/\/[\w]+(.[\w]+)([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?/i', "<a href=\"$0\" title=\"$0\" target=\"_blank\">$0</a>", $text );
$text = preg_replace('/(?<!"|href=|href\s=\s|href=\s|href\s=)(?<!:\/\/)www(.[\w]+)([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?/i', "<a href=\"http://$0\" title=\"http://$0\" target=\"_blank\">$0</a>", $text );

r/ och även https och ftp

Medlem sedan aug. 2002386 inlägg
#4

Hej hej!
Det funkar kalas!

Men det blev inte så bra ändå eftersom det blir ganska så fult med adressen mitt i texten...

Istället skulle jag nog vilja ha en funktion som den som finns här i forumet. Alltså en knapp där man skriver in i ett javascript promt länknamnet och länkadressen och sen så visas det som nedan.

Länk

Hur går detta till???

Medlem sedan jan. 20021 122 inlägg
#5

Om du vill skriva ut en länk med det som användaren skriver in i en prompt kan du göra så här:

<script type="text/javascript">
 function writeLink() {
  var href = prompt('Skriv in adressen', ' ');
  var text = prompt('Skriv in länktexten', ' ');
  var textruta = document.getElementById('textruta');
  textruta.value += '<a href=' + href + '>' + text + '</a>';
 }
</script>
...
<textarea id="textruta"> </textarea><br />
<input type=button value="Lägg till länk" onClick="writeLink();">
...

Nu lägger den till hela länktaggar i html i en textarea, men det går lätt att ändra om du ska ha det någon annan variant, exvis som wFs [ url] taggar.

Medlem sedan aug. 2002386 inlägg
#6

Hej hej!
Det blev ju jättebra... tills jag kom på en till grej som jag inte sagt tidigare... Så nu blir det allt lite klurigt!!!

Det som skrivs in visas på en nyhetssida men även på förstasidan. Fast på förstasidan visas bara de första 150 tecknena och sen står det '.... Läs mer här'

Det har jag gjort med följande kod:

// Kolla om texten är över 150 tecken
if (strlen($text) > 150) {
    // Skriv ut första 150 tecknen, sen ... 
    $short_text = substr($text, 0, 150) . '...';
    $str = $short_text . ' <a href=\"nyheter.php\">Läs mer här!</a>';
} else {
    $str = ($text);
}

Nu blir ju problemet när den bryter en länk mitt av, då blir det ju helt fel. Alltså att det 150 tecknet finns någonstanns i länken...

Går detta att lösa på något sätt, eller är vi besegrade??? ;)

Medlem sedan maj 20018 027 inlägg
#7

Det är väl bara att låta bli att bryta av länken. :)

Medlem sedan aug. 2002386 inlägg
#8

Njaaa... så enklet är det inte. eftersom det är många olika användare som kommer kunna skriva in en nyhet och de kommer antagligen inte klara av att inte bryta av länken...

Men går det inte att göra något script som säger att hela länken <a href="http://www.aftonbladet.se">Aftonbladet</a>
räknas som ett tecken?

Medlem sedan jan. 20021 122 inlägg
#9

Kan ju göra så att om texten är längre än (150 - strlen($länken)) så bryter du. Dvs

// Kolla om texten är över 150 tecken
$link = "<a href=\"www.webforum.nu\">Bli medlem nu!</a>";
if (strlen($text) > (150 - strlen($link))) {
    // Skriv ut första 150 tecknen, sen ... 
    $short_text = substr($text, 0, (150 - strlen($link))) . '...';
    $str = $short_text . $link;
} else {
    $str = ($text);
}

Enklare än att använda en regexp :)

Medlem sedan aug. 2002386 inlägg
#10

Men betyder inte det att jag måste ha länken sist i texten?

Och betyder inte det att jag måste göra något så att länken läggs i variablen $lank.

...och hur 17 gubbar gör jag detta?

Tacksam för all hjälp jag kan få :)

Går det inte att göra något script som säger att hela länken
<a href="http://www.aftonbladet.se">Aftonbladet</a>
räknas som ett tecken?

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)