webForumDet fria alternativet

Regexpmagin vill inte fungera

1 svar · 198 visningar · startad av GrodanBoll

GrodanBollMedlem sedan sep. 2001788 inlägg
#1

Hej hej :)

Håller på att trixa lite med reg exp och får naturligtvis inte allt att fungera.

Jag vill att en länk som är för lång ska kortas ner precis som den görs här på forumet.

function shortenString($str, $maxLength)
{
	$strLen = strlen($str);
	echo "bajs2: ".$strLen." - ".$str."<br />\n";

	if ($strLen > $maxLength)
	{
		echo "bajs<br />\n";
		return substr($str, 0, $maxLength * 0.7 - 2)."...".substr($str, $strLen - ($maxLength * 0.3 + 1));
	}

	return $str;
}

function bbcodeToHtml($text)
{
	$preg = array
	(
		// Url
			'/\[url\](.*?)\[\/url\]/'	=>	"<a href=\"\\1\" target=\"_blank\">".shortenString("\\1", 30)."</a>"
	);
	
	$text = preg_replace(array_keys($preg), array_values($preg), $text);
	return $text;
}

Problemet är att jag inte får med mig URL-strängen till shortenString-funktionen.
När jag gör kontrollen på om strängen är längre än 30 tkn så blir det False. Strängen som kommer in i funktionen är '\1'.
Och visst, det hade jag kunnat acceptera på någe vis men sen när URL:en omvandlas så får jag ändå ut hela länkensträngen mellana-taggarna.

Alltså skiver jag [ url ] qwertyuiop [ /url ] (la in ett par blanksteg extra för att inte webforum skulle omvandla koden) så får funktionen fortfarande in '\1' istället för 'qwertyuiop'. Men länken blri ändå rätt.

Jag fattar inte alls varför det blir så.
Hade varit kanontacksam för lite hjälp. :/

lunne82Medlem sedan dec. 2003153 inlägg
#2

Jag tror du ska ta en titt på exempel 4 i PHP manualen för preg_replace() .

133 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)