2013-09-07 3 views
1

У нас есть такой код:Одиночные и двойные кавычки вместе как значение атрибута HTML?

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-сущностей (например, &quot;), htmlentities() или аналогичные функции?

+0

Почему вы не хотите использовать 'htmlentities()' (хотя 'htmlspecialchars()' будет достаточно в вашем случае)? – ComFreek

+0

HTML-объекты являются * правильным * способом размещения зарезервированных символов в атрибуте HTML * context *. Просто потому, что он часто работает без do esn't означает, что это соответствует стандартам. – mario

+0

Вы также можете использовать числовые символьные ссылки вместо ссылок на сущности. – Gumbo

ответ

9

Есть ли способ это исправить БЕЗ с использованием HTML-сущностей (например, &quot;), htmlentities() или аналогичные функции?

Нет, не существует. Двойная кавычка (") имеет особое значение внутри атрибута HTML. Если вы хотите поместить его в значение атрибута, вы должны (это не истинное обязательное условие, но хорошее эмпирическое правило. Это необходимо, если вы используете атрибуты, разделенные двойными кавычками, как и в вашем вопросе), напишите его как его предприятие &quot;. Об этом нет.

На самом деле даже <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.

+1

'' является допустимым HTML. Кроме того, '' является допустимым HTML для валидатора W3C. –

+0

Заданное значение атрибута '[spec] (http://www.w3.org/TR/html-markup/syntax.html#syntax-attr-single-quote) только подтверждает, что значение не может содержать буквенный символ кавычки такой же тип, что и цитирование, используемое для данного значения атрибута. –

+0

Это зависит от того, какие правила SGML вы следуете. Но это хорошее эмпирическое правило, что вам нужно использовать '<' для '<' и '&' для '&' в HTML вообще и '"' для '' 'внутри значения атрибута также более конкретно. – hakre

-1

Как правило, вы не можете этого сделать. Хотя вы не указали, какую версию HTML вы используете. Но вот хорошая документация:

http://www.w3.org/TR/html-markup/syntax.html#attribute

очень Из этого описания ясно, что в некоторых случаях вы должны использовать управляющие последовательности.

0

Чтобы решить вопрос в названии, нет проблем с использованием значений «и» в значении атрибута. Проблема возникает при линеаризации значений, ir записывая их в разметке HTML (как противоположность их генерации с помощью клиент- а затем, если значение содержит как «и», так и одно из них должно быть экранировано, в зависимости от того, какой из них используется в качестве разделителя значений.

Вам не нужно использовать ссылки на объекты.Символьные ссылки &#x22; и &#x27; (или эквивалентные десятичные ссылки) также могут использоваться.

В случае струны

Она сказала: «Я не знаю.»

правильное английское правописание

Она сказала: «Я не знаю»

Используя правильные знаки препинания, не проблема разметки не возникает, так как вы можете использовать Ascii кавычки "или Ascii apostrophe как разделитель.Они предназначены для использования на компьютерных языках, а не на человеческих языках.

+0

'' 'не тот персонаж, в котором я нуждаюсь. Я пытаюсь использовать одинарные кавычки –

+0

Есть ли раскладки клавиатуры с '' '? Я еще не видел его. Моя клавиатура 'en-US' имеет только' '' и '''. –

+0

@ Programmer.zip, если ваш пример реален, тогда вам нужно '' '. –

Смежные вопросы