Есть ли способ это исправить БЕЗ с использованием HTML-сущностей (например, "
), htmlentities()
или аналогичные функции?
Нет, не существует. Двойная кавычка ("
) имеет особое значение внутри атрибута HTML. Если вы хотите поместить его в значение атрибута, вы должны (это не истинное обязательное условие, но хорошее эмпирическое правило. Это необходимо, если вы используете атрибуты, разделенные двойными кавычками, как и в вашем вопросе), напишите его как его предприятие "
. Об этом нет.
На самом деле даже <tag attr='this"'>
не ошибается HTML, также и большинство браузеров может иметь дело с этим. Однако это не поможет вам, потому что вы ищете оба кавычки - одиночный и двойной - и один из них всегда в HTML является разделителем значения атрибута - если вам нужны пробелы внутри значения атрибута (как и вы) ,
Однако, не беспокойтесь об этом. Он работает, и вы можете выразить все, что вам нравится, включая комбинацию кавычек, которые у вас есть.
И на самом деле PHP предназначен для вас, чтобы взять на себя бремя «ускользания» всех этих символов только с помощью метода htmlspecialchars
, который выполняет всю работу за вас. Внутри строки PHP у вас есть исходный текст - с одинарными и двойными кавычками, как вы считаете нужным - дословно.
$myString = 'She said: "I don\'t know."';
printf('<input type="text" name="myInput" value="%s" />'
, htmlspecialchars($myString));
Просто укороченный пример, который должен продемонстрировать, как это работает. Online demo.
Почему вы не хотите использовать 'htmlentities()' (хотя 'htmlspecialchars()' будет достаточно в вашем случае)? – ComFreek
HTML-объекты являются * правильным * способом размещения зарезервированных символов в атрибуте HTML * context *. Просто потому, что он часто работает без do esn't означает, что это соответствует стандартам. – mario
Вы также можете использовать числовые символьные ссылки вместо ссылок на сущности. – Gumbo