@ 2014-03-17T19:31:17Z <?php
function printTruncated($maxLength, $html, $isUtf8=true) {
$printedLength = 0;
$position = 0;
$tags = array();
// For UTF-8, we need to count multibyte sequences as one character.
$re = $isUtf8
? '{</?([a-z]+)[^>]*>|&#?[a-zA-Z0-9]+;|[\x80-\xFF][\x80-\xBF]*}'
: '{</?([a-z]+)[^>]*>|&#?[a-zA-Z0-9]+;}';
while ($printedLength < $maxLength && preg_match($re, $html, $match, PREG_OFFSET_CAPTURE, $position)) {
list($tag, $tagPosition) = $match[0];
// Print text leading up to the tag.
$str = substr($html, $position, $tagPosition - $position);
if ($printedLength + strlen($str) > $maxLength) {
print(substr($str, 0, $maxLength - $printedLength));
$printedLength = $maxLength;
break;
}
print($str);
$printedLength += strlen($str);
if ($printedLength >= $maxLength) break;
if ($tag[0] == '&' || ord($tag) >= 0x80) {
// Pass the entity or UTF-8 multibyte sequence through unchanged.
print($tag);
$printedLength++;
} else {
// Handle the tag.
$tagName = $match[1][0];
if ($tag[1] == '/') {
// This is a closing tag.
$openingTag = array_pop($tags);
assert($openingTag == $tagName); // check that tags are properly nested.
print($tag);
}
else if ($tag[strlen($tag) - 2] == '/') {
// Self-closing tag.
print($tag);
}
else {
// Opening tag.
print($tag);
$tags[] = $tagName;
}
}
// Continue after the tag.
$position = $tagPosition + strlen($tag);
}
// Print any remaining text.
if ($printedLength < $maxLength && $position < strlen($html)) {
print(substr($html, $position, $maxLength - $printedLength));
}
// Close any open tags.
while (!empty($tags)) {
printf('</%s>', array_pop($tags));
}
}
printTruncated(10, '<b><Hello></b> <img src="world.png" alt="" /> world!'); print("\n");
printTruncated(10, '<table><tr><td>Heck, </td><td>throw</td></tr><tr><td>in a</td><td>table</td></tr></table>'); print("\n");
printTruncated(10, "<em><b>Hello</b>w\xC3\xB8rld!</em>"); print("\n");
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for 4.3.3 - 4.3.11 , 4.4.0 - 4.4.9 , 5.0.0 - 5.0.5 , 5.1.0 - 5.1.6 , 5.2.0 - 5.2.17 , 5.3.0 - 5.3.29 , 5.4.0 - 5.4.45 , 5.5.0 - 5.5.38 , 5.6.0 - 5.6.28 , 7.0.0 - 7.0.20 , 7.1.0 - 7.1.25 , 7.2.0 - 7.2.33 , 7.3.0 - 7.3.33 , 7.4.0 - 7.4.33 , 8.0.0 - 8.0.30 , 8.1.0 - 8.1.28 , 8.2.0 - 8.2.18 , 8.3.0 - 8.3.6 <b><Hello></b> <img src="world.png" alt="" /> w
<table><tr><td>Heck, </td><td>thro</td></tr></table>
<em><b>Hello</b>wørl</em>
Output for 4.3.0 - 4.3.2 Warning: Wrong parameter count for preg_match() in /in/UGeKF on line 14
<b><Hel
Warning: Wrong parameter count for preg_match() in /in/UGeKF on line 14
<table><tr
Warning: Wrong parameter count for preg_match() in /in/UGeKF on line 14
<em><b>Hel
preferences:dark mode live preview
255.32 ms | 402 KiB | 371 Q