dolythgoe
asked on
truncating a long title and wrapping to a new line
Hi all,
I have some text that I need to format that is fed from a db.
This text might be nicely structured with spaces or lots of characters connected e.g.:
wwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwww wwwwwwwwww wwwwwwwww
What I'm looking to do is apply some editing if a series of connected characters are detected without spacing.
So something like:
- If character length of string (which doesn't have any spaces) exceeds char limit, then add a <br /> so it wraps to a new line.
Cheers
I have some text that I need to format that is fed from a db.
This text might be nicely structured with spaces or lots of characters connected e.g.:
wwwwwwwwwwwwwwwwwwwwwwwwww
What I'm looking to do is apply some editing if a series of connected characters are detected without spacing.
So something like:
- If character length of string (which doesn't have any spaces) exceeds char limit, then add a <br /> so it wraps to a new line.
Cheers
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
PHP wordwrap() or substr() probably holds the solution you want - the devil is in the details. In publishing we often use a thing called a "teaser fragment."
<?php // RAY_teaser_fragment.php
error_reporting(E_ALL);
// CREATE A TEASER FRAGMENT HEADLINE
// RETURN FIRST FEW WHOLE WORDS FOLLOWED BY ELLIPSES
// WITH A LINK TO THE FULL ARTICLE
// $length IS MINIMUM TRUNCATION CHARACTER COUNT
function teaser_fragment($text, $length=32, $url='/', $delim='|||')
{
// IF TRUNCATION IS NEEDED
if (strlen($text) > $length)
{
// IF TRUNCATION IS NEEDED, BREAK STRING APART
$t = wordwrap($text, $length, $delim);
$a = explode($delim, $t);
$z = '...';
}
// IF TRUNCATION IS NOT NEEDED
else
{
$a[0] = $text;
$z = NULL;
}
// CONSTRUCT THE FRAGMENT WITH THE LINK AND ADD ELLIPSIS (LINK) TO THE END
$teaser
= '<a target="_blank" href="'
. $url
. '">'
. $a[0]
. $z
. '</a>'
;
return $teaser;
}
// USE CASES
echo "<pre>";
echo PHP_EOL;
echo "1...5...10...15...20...25...30...35...40...45..." . PHP_EOL;
echo teaser_fragment('Now is the time for all good men to come to the aid of their party');
echo PHP_EOL;
echo teaser_fragment('Now is the time for all good men to come to the aid of their party', 300);
echo PHP_EOL;
echo teaser_fragment('Now is the time for all good men to come to the aid of their party', 15, 'http://en.wikipedia.org/wiki/Filler_text');
ASKER