webForumDet fria alternativet

Tillåta länkar i vissa fall

PHP

2 svar · 326 visningar · startad av Melea

Medlem sedan juli 20033 147 inlägg
Frågan#1

Hejsan

Jag kör en liten funktion för att göra så att länkar automatiskt blir länkar.

function parser($text)	{

	$text = preg_replace("/((http(s?):\/\/)|(www\.))([\w\.\\:\\?\\~\\=\\&\-_\/]+)/i","<a href=\"http$3://$4$5\"><u>$2$4$5</u></a>",$text);
	$text = preg_replace("/([\w\.\-_]+)(@)([\w\.\-_]+)/i", "<a href=\"mailto:$0\"><u>$0</u></a>",$text);

	$text = strip_tags($text, '<a><i><u><b><object><param><embed>');

	$text = preg_replace("'\[(b|i|u)\](.*?)\[\/\\1\]'is", "<$1>$2</$1>", $text);
	$text = preg_replace("'\[(aqua|black|red|blue|fuchsia|gray|green|lime|maroon|navy|olive|purple|silver|teal|white|yellow)](.*?)\[\/\\1]'is", "<span style=\"color:$1\">$2</span>", $text);

	return trim(stripslashes($text));

}

I samma funktion kör jag strip_tags(); som gör att jag tillåter viss html-kod, såsom att göra fet text, skriva egna länkar och infoga youtube-embeds.

Problemet när jag kör den här funktionen är att om jag infogar en youtubelänk som kan se ut såhär:

<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/5XQ_GWKvDE0"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/5XQ_GWKvDE0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object>

Nu blir det automatiskt länkar inne i min infogade youtube-text, om ni förstår vad jag menar.

Hur ska jag lösa detta?

Tack på förhand!

Medlem sedan jan. 2005953 inlägg
#2

Om du skriver så här så ändras inte de URL:er som har src=" eller value=" före sig.

$text = preg_replace('/(?<!src="|value=")((http(s?):\/\/)|(?<!http:\/\/)(www\.))([\w\.\\:\\?\\~\\=\\&\-_\/]+)/i',"<a href=\"http$3://$4$5\"><u>$2$4$5</u></a>",$text);
Medlem sedan juli 20033 147 inlägg
#3

metalboy skrev:

Om du skriver så här så ändras inte de URL:er som har src=" eller value=" före sig.

$text = preg_replace('/(?<!src="|value=")((http(s?):\/\/)|(?<!http:\/\/)(www\.))([\w\.\\:\\?\\~\\=\\&\-_\/]+)/i',"<a href=\"http$3://$4$5\"><u>$2$4$5</u></a>",$text);

Fungerar utmärkt! Stort tack! :bire (y)

256 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)