A <
интерпретируется как начало тега HTML.
<
- это HTML-кодированная сущность, которая будет интерпретироваться как символ «<». </p>
Если вы помещаете в атрибут что-то, похожее на HTML, вам нужно кодировать его HTML, чтобы не нарушить атрибут HTML. Например, атрибут окружен кавычками, если вы хотите, чтобы внутри атрибута были кавычки в качестве значения, которое должно быть "
:
attribute=""value""
bootstrap-select использует значение атрибута data-content
как HTML.
Так что data-content="<span>"
в конечном итоге станет HTML-элементом <span>
.
Если вы хотите, чтобы он заканчивался текстом "", вам нужно предоставить HTML, который отображает текст "", то есть <span>
. Поскольку вы помещаете это в атрибут HTML, вам необходимо кодировать HTML , в:
data-content="&lt;span&gt;"
☝️ Это правильное значение в кодировке HTML (потому что оно в атрибуте) <span>
, которое при интерпретации как HTML (как будет делать bootstrap-select ) будет отображаться как текст "».
Итак:
$attrTemplate = '<span class="glyphicon glyphicon-stop" style="color:%s"></span>
<span style="text-align:left">%s</span>';
$attr = sprintf($attrTemplate, htmlspecialchars($row['cor']), htmlspecialchars($row['nome']));
$optionTemplate = '<option value="%s" data-content="%s">%s</option>';
printf($optionTemplate, htmlspecialchars($row['id']), htmlspecialchars($attr), htmlspecialchars($row['nome']));
Как видите, все, что входит в HTML, и которое вы хотите сохранить как есть, должно быть закодировано в HTML (здесь используется htmlspecialchars
).
Также см. Великий эскапизм (или: что нужно знать, чтобы работать с текстом внутри текста) .