У нас есть такой код:
echo '<input type="text" name="myInput" value="Double " Quotes" />';
Абсолютно это не работает, потому что цитата после Double
заканчивает значение. Мы можем исправить это, используя одинарные кавычки вместо двойных.
echo '<input type="text" name="myInput" value=\'Double " Quotes\' />';
Теперь я хочу использовать как одиночные, так и двойные кавычки в качестве значения. Он должен выходить. She said:"I don't know."
Есть ли способ исправить его БЕЗ использования HTML-сущностей (Like "
), htmlentities()
или подобных функций?
Есть ли способ исправить его БЕЗ использования HTML-сущностей (Like
"
),htmlentities()
или подобных функций?
Нет, нет. Двойная кавычка ( "
) имеет особое значение внутри атрибута HTML. Если вы хотите поместить ее в значение атрибута, вы должны (это не истинное обязательное условие, но хорошее эмпирическое правило. Это необходимо, если вы используете атрибуты, разделенные символом двойные кавычки, как вы делаете в своем вопросе), напишите его как его сущность "
. Нет никакого способа обойти это.
Фактически даже <tag attr='this"'>
не является ошибочным HTML, и большинство браузеров могут справиться с этим. Однако это не поможет вам, потому что вы ищете оба кавычки – одиночные и двойные – и один из них всегда в HTML является разделителем значения атрибута – если вам нужны пробелы внутри значения атрибута (как и вы).
Однако не беспокойтесь об этом. Он работает, и вы можете выразить все, что вам нравится, включая комбинацию кавычек, которые у вас есть.
И на самом деле PHP для вас взять на себя бремя «ускользания» всех этих персонажей только с htmlspecialchars
метода htmlspecialchars
который делает всю работу за вас. Внутри строки PHP у вас есть исходный текст – с одинарными и двойными кавычками, как вы считаете нужным – дословно.
$myString = 'She said: "I don\'t know."'; printf('<input type="text" name="myInput" value="%s" />' , htmlspecialchars($myString));
Просто сокращенный пример, который должен продемонстрировать, как это работает. Онлайн-демонстрация .
Чтобы решить вопрос в названии, нет никакой проблемы с использованием значения «и» в значении атрибута. Проблема возникает при линеаризации значений, и их записи в разметке HTML (как противоположность их созданию с помощью клиентского JavaScript). Затем, если значение содержит «и», любой из них должен быть экранирован, в зависимости от того, какой из них используется в качестве разделителя значений.
Однако вам не нужно использовать ссылки на сущности. "
ссылки "
и '
(или эквивалентные десятичные ссылки).
В случае строки
Она сказала: «Не знаю».
правильное английское правописание
Она сказала: «Не знаю».
Используя правильные знаки препинания, проблема разметки не возникает, так как вы можете использовать кавычку Ascii »или апостип Ascii в качестве разделителя. Они предназначены для использования на компьютерных языках, а не на человеческих языках.
Как правило, вы не можете этого сделать. Хотя вы не указали, какую версию HTML вы используете. Но вот хорошая документация:
http://www.w3.org/TR/html-markup/syntax.html#attribute
Из этого описания очень ясно, что в некоторых случаях вы должны использовать escape-последовательности.