<?php
//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com
class String{
public static function truncate($s, $l, $e = '...', $isHTML = false){
$i = 0;
$tags = array();
if($isHTML){
preg_match_all('/<[^>]+>([^<]*)/', $s, $m, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
foreach($m as $o){
if($o[0][1] - $i >= $l)
break;
$t = substr(strtok($o[0][0], " \t\n\r\0\x0B>"), 1);
if($t[0] != '/')
$tags[] = $t;
elseif(end($tags) == substr($t, 1))
array_pop($tags);
$i += $o[1][1] - $o[0][1];
}
}
return substr($s, 0, $l = min(strlen($s), $l + $i)) . (count($tags = array_reverse($tags)) ? '</' . implode('></', $tags) . '>' : '') . (strlen($s) > $l ? $e : '');
}
}
$sText = '<p>Ключевым элементом в области снижения влияния объектов производства на водные ресурсы является уменьшение забора воды и качество <i>очистительных</i> процедур.</p>
<p>Для <strong>этих</strong> целей Группа «Газпром» проводит организационно-технические мероприятия, <img src="http://osb.loc/images/logo.jpg" alt="test" text> в частности по установке средств измерения расхода воды, а также установке и наладке запорно-затворной арматуры на своих предприятиях, что способствует существенной экономии водных ресурсов.</p>
<p>Повышение эффективности действующих очистных сооружений и внедрение новых технологий очистки стоков позволяет обеспечить нормативное качество очистки сточных вод. Общая мощность очистных сооружений «Газпрома» в 2010 г. составила 153,263 млн куб. м. Половина нормативно очищенных стоков прошла очистку на сооружениях биологической очистки, 39% — механической очистки, 12% — физико-химической очистки сточных вод.</p>';
echo String::truncate( $sText, 150, ' ...'); //jo<...
echo "\n\n\n";
echo String::truncate( $sText, 150, ' ...', true); //jo<i><b>n</b></i>...
echo "\n\n\n";
echo String::truncate( $sText, 150, ' ...', false); //jo<i><b>n...
<p>Ключевым элементом в области снижения влияния объектов производства на водные � ...
<p>Ключевым элементом в области снижения влияния объектов производства на водные ре</p> ...
<p>Ключевым элементом в области снижения влияния объектов производства на водные � ...
Output for 5.1.0
Fatal error: fatal flex scanner internal error--end of buffer missed in /in/e3IIZ on line 34
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/e3IIZ on line 6
Process exited with code 255.
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/e3IIZ on line 6
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/e3IIZ on line 6
Process exited with code 255.