[英]PHP - substr for html texts
基本上我想要的只是计算单词并忽略句子中的 html 属性,例如: <p></p> <span></span
等。
如果单词超出字符限制,则应在末尾添加省略号。
这是我当前的代码:
function limitText($length, $value)
{
return strlen($value) > $length ? substr($value, 0, $length) . '...' : $value;
}
这段代码的问题是,它也会计算 html。
当前行为:
echo limitText(6, '<p>Hello</p>');
// displays: <p>Hel...
echo limitText(2, '<p>Hello</p>');
// displays: <p...
echo limitText(4, '<p>Hello</p>');
// displays: <p>H...
echo limitText(8, '<p>cutie</p> <p>patootie</p>');
// displays: <p>cutie...
想要的结果:
echo limitText(6, '<p>Hello</p>');
// displays: <p>Hello</p>
echo limitText(2, '<p>Hello</p>');
// displays: <p>He...</p>
echo limitText(4, '<p>Hello</p>');
// displays: <p>Hell...</p>
echo limitText(8, '<p>cutie</p> <p>patootie</p>');
// displays: <p>cutie</p> <p>pat...</p>
我的想法是替换>
和</
之间的字符串
function limitText($length, $value)
{
return preg_replace_callback('|(?<=>)[^<>]+?(?=</)|', function ($matches) use (&$length)
{
if($length <= 0)
return '';
$str = $matches[0];
$strlen = strlen($str);
if($strlen > $length)
$str = substr($str, 0, $length) . '...';
$length -= $strlen;
return $str;
},
$value);
}
您应该将 strip_tags 与 str_replace 结合使用,例如:
function limitText($length, $value)
{
//Get the real text
$textValue = strip_tags($value);
//get substr of real text
$realText = strlen($textValue) > $length ? substr($textValue, 0, $length) . '...' : $textValue;
// replace real text with the sub text
return str_replace($textValue, $realText, $value);
}
尝试这个:-
function limitText($length, $value){
return substr(strip_tags($value), 0, $length);
}
echo limitText(1, '<h1>Hello, PHP!</h1>');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.