Szövegtördelés szépen, meghatározott karakterszám alapján

Szövegtördelés szépen, meghatározott karakterszám alapján

Szövegtördelés szépen, meghatározott karakterszám alapján

Számos esetben fordul elő, hogy szükségünk van egy nagyobb szöveg rövidített kivonatára, ráadásul úgy, hogy férjen bele egy fix karakterszámba és még értelmezhető szöveg is legyen a végeredmény, anélkül, hogy félbevágna szavakat, vagy mondatrészeket. Ilyen példa erre, amikor egy cikkünk, vagy blog bejegyzésünk szöveges tartalmából automatikusan szeretnénk előállítani egy "meta description"-t. Ennek hossza optimális esetben 155 karakter. De a felhasználási területe lehet még akár ennek a blog bejegyzés előnézeténél kiírt szöveg, aminek szintén szeretnénk, ha egységes hossza lenne és lehetőleg még értelmesen is válassza el a mondatot, ne csak a végére tegyen be 3 pontot, amikor elfogyott a karakter limit.

Ennek megoldására készítettem a "get_short_text" nevű függvényt. A paramétereiben megadható, hogy maximum mennyi karakterre optimalizálja a szöveg vágását, mi maga a szöveg és, hogy szeretnénk-e a végére tenni valamilyen lezárást, ha az belefér a meghatározott karakter limitbe.

A függvény a "$regexp" nevű tömbben tárolja azokat az írásjeleket, ahol képes lesz megvágni a szöveget. Ha ezek közül egyik sem szerepel a szövegben, akkor a szöveg végére be fogja tenni az "end" paraméter értékét.

A "get_clear_text" nevű függvény pedig megtisztítja a darabolni kíván szöveget, mert az tartalmazhat akár html elemeket is, melyek megszakítása, vagy rossz elhelyezése felboríthatja a weboldal megjelenését, vagy rosszabb esetben a helyes működését.

PHP


<?php
function get_clear_text($temp, $result)
	{
	$temp = strip_tags(html_entity_decode($temp));
	$temp = preg_replace('/\s[\s]+/',' ',$temp);
	$temp = preg_replace('/^[\s]+/','',$temp);
	$temp = preg_replace('/[\s]+$/','',$temp);
	$temp = preg_replace('/\s[\n\r\t]/','',$temp);
	$temp = str_replace('"','',$temp);

	if ($result == 'get')
		{
		return $temp;
		}
	elseif ($result == 'print')
		{
		echo $temp;
		}
	}


function get_short_text($max, $temp, $end, $result)
	{
	$regexp = array('.',',','?','!',':',';');

	if (strlen($temp) > $max)
		{
		$last_position = text_parser($temp, $regexp, $max, 0);
		$true = substr($temp, 0, $last_position);
		$false = substr($temp, ($last_position + 1), strlen($temp));
		$text = $true;

		while ($last_position = text_parser($false, $regexp, $max, ($last_position + 1)))
			{
			$true = substr($temp, 0, $last_position);
			$false = substr($temp, ($last_position + 1), strlen($temp));
			$text = $true;
			}
		}
	else
		{
		$text = $temp;
		}

	if (filter_var($end))
		{
		if (($max-strlen($end)) >= strlen($text))
			{
			$last_char = substr($text, -1);
			if (!in_array($last_char, $regexp))
				{
				$text .= $end;
				}
			else
				{
				$text = substr($text, 0, (strlen($text)-1)).$end;
				}
			}
		}

	if ($result == 'get')
		{
		return $text;
		}
	elseif ($result == 'print')
		{
		echo $text;
		}
	}


function text_parser($temp, $regexp, $max, $step)
	{
	$temp_array = array();
	foreach($regexp as $exp)
		{
		$result = strpos($temp, $exp, 1);
		if ($result !== false)
			{
			$temp_array[$exp] = $result;
			}
		}
	if (!filter_var_array($temp_array))
		{
		return false;
		}
	else
		{
		$last_position = (int)min($temp_array) + 1 + $step;
		if ($last_position < $max)
			{
			return $last_position;
			}
		else
			{
			return false;
			}
		}
	}
?>

A letölthető demo-ban bemutatok néhány gyakorlati példát a működésére.

PHP


<?php
$text = '<p>Lorem <a href="#">ipsum dolor</a> sit amet, consectetur adipiscing elit. Praesent libero enim, finibus eu interdum sit amet, laoreet at metus. Donec at diam vulputate ex molestie suscipit ac et neque. Curabitur convallis augue eget vehicula iaculis. Vivamus a consectetur odio. Pellentesque nisl quam, lacinia at quam sit amet, blandit imperdiet nulla. Sed semper libero a dolor lacinia commodo. Vestibulum non suscipit magna.

Praesent in blandit dolor, ac finibus elit. Cras id ante commodo, congue massa quis, vulputate libero. Etiam magna massa, eleifend eu blandit at, eleifend quis sapien. Suspendisse lacinia lacinia vestibulum. Sed vitae varius elit. Cras non lacus non dolor egestas ultrices vitae et mi. Fusce tincidunt est placerat magna volutpat, nec mattis dui pharetra. Mauris commodo rhoncus lorem, sed tincidunt nisl laoreet non. Proin lorem augue, tempor ac gravida eget, ultricies ut nisi. Phasellus sit amet finibus purus, nec lobortis justo. Sed bibendum in dolor ut consectetur. Nunc viverra mi in consequat ullamcorper.</p>';

echo '<p>'.get_short_text(155, get_clear_text($text, 'get'), '', 'get').'</p>';
echo '<p>'.get_short_text(300, get_clear_text($text, 'get'), '...', 'get').'</p>';

$text = 'Rövidebb szöveg';
echo '<p>'.get_short_text(155, get_clear_text($text, 'get'), '...', 'get').'</p>';
?>

Demo letöltése

Leírásaink azon kezdő és haladó programozóknak nyújtanak segítséget, akik már minimális szinten foglalkoztak weboldalkészítéssel. Ha szeretnél jobban elmélyülni a témában, vagy elsajátítani alapokat, még tovább fejlődni, akkor nézz körbe tanfolyam kínálatunkban, ahol a kezdőtől a profi szintig nyújtunk képzéseket a számodra.

Oszd meg barátaiddal is!

Facebook Twitter Linkedin

Elérhetőségeink

  • Címünk: 1139 Budapest, Frangepán utca 3. (1. emelet)

  • Ügyfélfogadás, beiratkozás: Hétfőtől - péntekig: 08:00-15:00

  • Telefonszámunk: 06 70 604 2060, vagy 06 1 4500 110

  • E-mail címünk:

Közösségünk