gpt4 book ai didi

php - 在不破坏 html 标签的情况下剪切文本

转载 作者:太空狗 更新时间:2023-10-29 15:09:22 25 4
gpt4 key购买 nike

有没有办法在不编写自己的函数的情况下做到这一点?

例如:

$text = 'Test <span><a>something</a> something else</span>.';
$text = cutText($text, 2, null, 20, true);
//result: Test <span><a>something</a></span>

我需要让这个函数坚不可摧

我的问题类似于 This thread但我需要一个更好的解决方案。我想保持嵌套标签不变。

到目前为止我的算法是:

function cutText($content, $max_words, $max_chars, $max_word_len, $html = false) {
$len = strlen($content);
$res = '';

$word_count = 0;
$word_started = false;
$current_word = '';
$current_word_len = 0;

if ($max_chars == null) {
$max_chars = $len;
}
$inHtml = false;
$openedTags = array();
for ($i = 0; $i<$max_chars;$i++) {

if ($content[$i] == '<' && $html) {
$inHtml = true;
}

if ($inHtml) {
$max_chars++;
}

if ($html && !$inHtml) {

if ($content[$i] != ' ' && !$word_started) {
$word_started = true;
$word_count++;
}

$current_word .= $content[$i];
$current_word_len++;

if ($current_word_len == $max_word_len) {
$current_word .= '- ';
}

if (($content[$i] == ' ') && $word_started) {
$word_started = false;
$res .= $current_word;
$current_word = '';
$current_word_len = 0;
if ($word_count == $max_words) {
return $res;
}
}
}

if ($content[$i] == '<' && $html) {
$inHtml = true;
}
}
return $res;
}

但是当然不行。我考虑过记住打开的标签并在它们未关闭时关闭它们,但也许有更好的方法?

最佳答案

这非常适合我:

function trimContent ($str, $trimAtIndex) {

$beginTags = array();
$endTags = array();

for($i = 0; $i < strlen($str); $i++) {
if( $str[$i] == '<' )
$beginTags[] = $i;
else if($str[$i] == '>')
$endTags[] = $i;
}

foreach($beginTags as $k=>$index) {
// Trying to trim in between tags. Trim after the last tag
if( ( $trimAtIndex >= $index ) && ($trimAtIndex <= $endTags[$k]) ) {
$trimAtIndex = $endTags[$k];
}
}

return substr($str, 0, $trimAtIndex);
}

关于php - 在不破坏 html 标签的情况下剪切文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5602087/

25 4 0