Вот то, что НЕ работает на меня:
<?php
$string = 'I have a dog and his name is <a href="http://www.jackismydog.com">Jack</a> and I love him very much because he\'s my favorite dog in the whole wide world and nothing could make me not love him, I think.';
$limited = substr($string, 0, 100).'...';
echo $string;
?>
Я хочу ограничить ВИДИМЫЙ ТЕКСТ 100 символами, но использование substr()
также включает невидимый текст в предел (<a href="http://www.jackismydog.com">
и </a>
) который поднимает 41 из тех доступных 100 символов.
Есть ли способ ограничить текст так, чтобы слово "Jack" из ссылки было бы включено в предел, но нет <a href="http://www.jackismydog.com">
или </a>
?
Править: Я хочу сохранить ссылку в строке, просто для не подсчета это - длина к пределу..
Непросто - вы, конечно, можете использовать strip_tags для удаления HTML из строки, но кроме этого простого решения нет.
Самый простой способ - это преобразовать это в структуру DOM. Для этого вы можете использовать DOMDocument . Затем вы можете просто просмотреть элементы и внести любые изменения в контент.
Другой подход - выполнить двухпроходный поиск и замену регулярного выражения - сначала используйте регулярное выражение для поиска содержимого тегов, а затем используйте регулярное выражение для замены содержимого сокращенным содержимым. Этого можно добиться с помощью обычных функций preg_ *.
Если вы хотите ограничить текстовую часть, вам нужно проанализировать ее и проверить ограничение самостоятельно. Самый простой способ:
if ( strlen(strip_tags($string)) > 100 )
{
// the url inside $url is too big
}
else
{
// the url inside $url fits
}