TinyButStrong htmlconv="no" не печатать строку, которая идет после двойных кавычек (" ") во всплывающей подсказке

У меня есть контент, который поступает из базы данных. Я использую библиотеку TBS с codeigniter. Я отображаю контент с ограничением в 200 символов. Пользователь может видеть полный контент с помощью наведения мыши на контент в качестве всплывающей подсказки. Но в подсказке строка после двойных кавычек (" ") не отображается.

На изображении выше только привет печать друзей.

HTML-код:

<td><a class="tooltip-right" data-tooltip="<!--[blk4.tooltip;block=tr;comm;htmlconv=no;noerr]-->"><!--[blk4.tooltip;block=tr;comm;ope=max:200;]--></a></td>

Если я удаляю htmlconv="no" из своего HTML-кода, он печатается идеально, но печатает тег br, когда строка разрывается.

Я также попробовал это в контроллере

$string1=array("&nbsp;","<br />");
$string2=array(" ","/n");
$this->data['blk4'][]['tooltip']= str_replace($string1,string2,strip_tags($b['description']));

Любая идея??

3 ответа

Решение

Я решил свою проблему, заменив эту строку на странице просмотра:

<td><a class="tooltip-right" data-tooltip='<!--[blk4.tooltip;block=tr;comm;htmlconv=no;noerr]-->'><!--[blk4.t‌​ooltip;block=tr;comm;ope=max:200;]--></a></td>

У меня есть изменения " " с ' ' в data-tooltip=' ' в строке выше

Параметр htmlconv будет экранировать кавычки. В противном случае они будут включены как есть (что опасно и может привести к уязвимости XSS).

Когда они включены, они просто ломают ваш HTML. Допустим, вы хотите этот текст во всплывающей подсказке:

Watch out for "quotation" marks

Сгенерированный html будет разбит так:

<a ... data-tooltip="Watch out for "quotation" marks">...</a>

Выделение синтаксиса, приведенное выше, показывает вам, как синтаксический анализатор думает, что текст всплывающей подсказки заканчивается, когда появляется первая кавычка.

Поэтому никогда не вводите пользовательский ввод, не удаляя его должным образом (например, используя htmlconv). Вместо этого раздеть <br> теги, возможно, используя strip_tags:

$this->data['blk4'][]['tooltip'] = strip_tags($b['description']);

Чтобы иметь допустимое содержимое для значения атрибута, вы должны экранировать вашу строку из сущностей XML/HTML, а также из разделителей ", (Они представляют собой другой способ иметь действительный HTML-контент, но он намного сложнее.)

TBS не предоставляет такую ​​функцию на родном языке, но вы можете изменить свои данные до слияния. Вы также можете изменить его во время слияния, используя onformat или же ondata параметр.

Пример экранирования данных:

$x = $this->data['blk4'][]['tooltip']
$x = strip_tags($x);
$x = str_replace('"', '', $x);
$this->data['blk4'][]['tooltip'] = $x;
Другие вопросы по тегам