Почему символы “управления” являются запрещенными в XML 1.0?

Ошибка синтаксиса: ошибка синтаксиса, неожиданный T_ENCAPSED_AND_WHITESPACE

Эта ошибка чаще всего встречается при попытке ссылаться на значение массива с помощью ключевого слова для интерполяции внутри строки с двумя кавычками , когда вся конструкция комплексной переменной не заключена в {}.

Случай ошибки:

Это приведет к Unexpected T_ENCAPSED_AND_WHITESPACE:

echo "This is a double-quoted string with a quoted array key in $array['key']";
//---------------------------------------------------------------------^^^^^

Возможные исправления:

В строке с двойными кавычками PHP разрешает использовать строки ключей ключей без кавычек и не выдаст E_NOTICE. Таким образом, вышесказанное может быть записано как:

echo "This is a double-quoted string with an un-quoted array key in $array[key]";
//------------------------------------------------------------------------^^^^^

Вся сложная переменная массива и ключ (ы) могут быть заключены в {}, и в этом случае они должны быть указаны чтобы избежать E_NOTICE. Документация PHP рекомендует этот синтаксис для сложных переменных.

echo "This is a double-quoted string with a quoted array key in {$array['key']}";
//--------------------------------------------------------------^^^^^^^^^^^^^^^
// Or a complex array property of an object:
echo "This is a a double-quoted string with a complex {$object->property->array['key']}";

Конечно, альтернатива любой из вышеперечисленного заключается в объединении переменной массива in вместо интерполировать его:

echo "This is a double-quoted string with an array variable " . $array['key'] . " concatenated inside.";
//----------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^

Для справки см. раздел «Переменная синтаксический анализ» в странице руководства PHP Strings

61
задан Community 23 May 2017 в 12:02
поделиться

5 ответов

Мое понимание - то, что этот диапазон запрещается на том основании, что язык разметки не должен иметь никакой потребности поддерживать символы управления передачей и управления потоком, и включая их создал бы проблему для любых редакторов и синтаксических анализаторов в двоичном преобразовании.

я изо всех сил пытаюсь найти что-либо исключая кафедрой на этом от Tim Bray и др.

редактирование: [приблизительно 110] обсуждение из символов управления и неопределенного подтверждения это не было точно сверхспроектировано:

в 9:27 17/06/00 - 0500, Mark Volkmann записал:

я никогда не видел обсуждение причины, почему большинство управляющих символов ASCII, таких как перевод формата, не позволяется в XML-документах. Может любой говорить мне причину позади того решения или указывать на меня на спецификацию. это объясняет это?

я не уверен, что мы сделали бы это тот же путь, если бы мы делали его снова. Я не вижу, что они причиняют любой реальный вред. Очевидно, если Вы оптимизируете для очень совместимого содержание язык разметки (и XML), законно с подозрением относиться к вещам как вертикальная вкладка и клавиша Backspace и так далее..., но тогда как это может быть последовательно для отъезда в \n и DEL и так далее?-Tim

26
ответ дан antiduh 24 November 2019 в 17:23
поделиться

кажется, что, возможно, требовалось, что они были закодированы в Escape, например, как & #x0007; и & #x001B;

можно сделать точно это в XML 1.1 для всех кроме \0.

18
ответ дан bobince 24 November 2019 в 17:23
поделиться

Это было давным-давно, но мое лучшее воспоминание было то, что у них нет графического представления и также не согласованный семантика. Выбор пары наугад, мы видим, что U+0006 "Подтверждает" или U+0016, "Синхронный неактивный"..., что они имеют в виду? Unicode не говорит. Даже назад, когда все утверждали, что поддерживали ASCII, не было никакой совместимости вокруг этого спама. XML, как предполагается, о совместимости.

опыт состоял в том, что люди, которые хотят использовать эти вещи действительно, хотят запихнуть двоичные данные в свои элементы XML (и следующая вещь, которую они хотят, должен включать ПУСТОЙ УКАЗАТЕЛЬ U+0000), который был явной нецелью XML со дня 1. Если Вы хотите представить номера 0x6 или 0x16, существует много хороших способов сделать это, которые не пачкают понятие "символа".

16
ответ дан 24 November 2019 в 17:23
поделиться

XML был разработан особенно вокруг Unicode (конкретно UTF-8 и UTF-16) и ISO/IEC 10646, оба из которых (я не вполне положителен в ISO 10646) содержат символы передачи/управления потоком, которые были перенесены от ASCII и дни символьно-ориентированных терминалов. В то время как те символы все еще имеют использование, они не принадлежат формата как XML.

Что касается этой новой кодировки, которая использует те коды для чего-то еще, ну, в общем, кажется, что спецификация XML, возможно, должна адаптироваться.

2
ответ дан foxxtrot 24 November 2019 в 17:23
поделиться

Почему Вы - двойной выход их? Это походит на хорошее место для &bell; и &escape;. (Неопределенный, обработанный обратным вызовом от синтаксического анализатора до Вашего кода)

1
ответ дан MSalters 24 November 2019 в 17:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: