Ограничение символов на определенное число в HTML-тексте с PHP

Я использую CKEditor и нашел/изменил плагин, который считает символы.

У меня есть премиум и базовые пользователи. Базовый пользователь ограничен 1000 символами, а премиум неограничен, но базовый пользователь может писать полный текст для предварительного просмотра/тестов и т. д. (это спецификация клиента, поэтому это нельзя изменить).

Пока я показываю, например. 1500 из 1000 символов в CKEditor, Я хочу сохранить в БД 1500 символов, но показывать только 1000 из них при выводе текста.

Но strlen и связанные с ним функции считают теги HTML как символы, и я этого не хочу. Также я не хочу их обнажать, потому что я потеряю формат.

Есть ли способ убедиться, что ограничение будет применено, но при этом все теги останутся (в PHP)??

Спасибо...


person Kostas    schedule 06.05.2011    source источник
comment
прерывание некоторого текста в середине произвольного HTML нетривиально. Сначала вам нужно найти текстовый узел, где вы, наконец, достигнете 1000 текстовых символов, затем вам нужно удалить все текстовые узлы в dom с этого момента, чтобы структура документа HTML оставалась действительной, но в нем больше не было содержимого. после точки отсечки.   -  person Marc B    schedule 07.05.2011


Ответы (2)


пытаться

$theHTML='<h2>Hello!</h2>';
$length = strlen ( strip_tags($theHTML) ); //Should be 6
echo "The non-HTML length is: $length";

Это удалит теги только для целей подсчета. На самом деле теги никогда не теряются.

Обновить

Согласно предложению webbiedave, это действительно должно быть

$theHTML='<h2>Hello!</h2>';
$length = strlen ( shtml_entity_decode(strip_tags($theHTML)) ); //Should be 6

//This will not trigger since only the text "Hello!" is only 6 chars.    
if ($length > 10) die('ERROR'); 

echo $theHTML; //Will echo full HTML, even though we checked the length without HTML.
person Dutchie432    schedule 06.05.2011
comment
Вы действительно должны сделать html_entity_decode(strip_tags($theHTML)), чтобы также уменьшить объекты, например. &quot; становится " - person webbiedave; 07.05.2011
comment
Длина — это легкая часть. Я хочу ограничить их по этой длине... Есть проблема! - person Kostas; 07.05.2011

Этот фрагмент кода, который я использовал ранее: http://www.php.net/manual/en/function.substr.php#92063 эта функция вычитает символы (например, от 0 до 1000), но оставляет HTML-теги нетронутыми.

person Joshua - Pendo    schedule 06.05.2011