Я знаю, что PHP unescape строка, как она выводится. Но я не понимаю, почемуКак PHP не создает строку?
echo "\\\/";
генерирует результат
\\/
Кто-нибудь есть идеи?
Я знаю, что PHP unescape строка, как она выводится. Но я не понимаю, почемуКак PHP не создает строку?
echo "\\\/";
генерирует результат
\\/
Кто-нибудь есть идеи?
Mh, я думаю, самый простой способ понять это, глядя на примеры просмотра:
echo "/"; =/
echo "//"; = //
echo "///"; = ///
echo "\"; = syntax error
echo "\\"; = \
echo "\""; = "
echo "\\\" = syntax error
echo "\\\/"; = \\/
Почему? Колодец \
используется для экранирования. Последний пример - экранирование с помощью \\
и /
с \/
. Хотя /
не нуждается в каких-либо побегах, это не повредит.
Вы можете задаться вопросом, почему echo "\\\"
не работает. Но если вы обратите пристальное внимание, вы заметите, что \\
в порядке, но тогда третий \
считается побегом для "
в конце строки, которая, очевидно, не должна быть экранирована, следовательно, синтаксическая ошибка.
. Должен ли последний случай выдавать ОДИН косую черту и ОДИН для перемотки вперед? – Bing
@Bing Нет, поскольку '/' не нуждается в escape-доступе. Вы можете попробовать это и с другими символами: 'echo '\ o"; ' –
Нет, потому что \ escape-код второй \ и все. Третий \, не имеющий специального символа справа, не считается ускользающим персонажем и взят как есть, поэтому \\/ –
Обратная косая черта - специальный символ в строковых литералах PHP. Он используется для удаления символов. Например, если вы хотите, чтобы написать цитату внутри строки в кавычках, он должен быть экранированы, чтобы избежать неоднозначного/неправильный синтаксис:
echo "\""; // (Because otherwise, WTF exactly would """ mean?!)
С обратной косой черты специальный символ, там должен быть способ сделать он «неспециалист», чтобы избежать его специальных свойств. Если вы хотите, чтобы написать один обратный слэш в строке, вы должны избежать этого:
echo "\\"; // (Because "\" would be a syntax error, since the " would be escaped.)
Так в "\\\/"
, есть один спасся слэш (\\
→ \
), а затем есть еще одна обратная дробная черта. Так как эта вторая (третья) обратная косая черта не сопровождается каким-либо двусмысленным символом, она принимается как есть (то есть \/
не означает ничего особенного, поэтому это просто означает «\ /»). Итак, у вас есть три фактических символа в этой строке: \
, \
и /
.
Обратите внимание, что это будет ошибка синтаксиса:
echo "\\\";
Поскольку первая пара не один обратный слэш, а затем \"
, что сбежавший "
, а потом нет «реального» "
потом до конца строки ,
Если персонаж, указанный ниже \
, не представляет a valid escape sequence, он будет оставлен как есть.
Образец \\
является допустимой escape-последовательностью, поэтому он заменяется на один \
.
Образец \/
: не действительная последовательность эвакуации, поэтому она оставлена одна.
Символ обратной косой черты имеет несколько применений. Во-первых, если за ним следует не алфавитно-цифровой символ, он убирает любое особое значение, которое может иметь этот символ.Это использование обратной косой черты в качестве escape-символа применяется как внутри, так и снаружи классов символов.
Например, если вы хотите совместить символ «*», вы пишете «*» в шаблоне. Это относится к тому, будет ли иначе следующий символ интерпретироваться как метасимвол, поэтому всегда безопасно предшествовать не буквенно-цифровому символу с буквой «\», чтобы указать, что он обозначает себя. В частности, если вы хотите совместить обратную косую черту, вы пишете «\».
Примечание: Одиночные и двойные кавычки строк PHP имеют особое значение обратного слэша. Таким образом, если \ нужно сопоставить с регулярным выражением \, то в PHP-коде должны использоваться «\\» или «\\».
И что должно быть результатом? –
См. Мое редактирование. Это забавно StackOverflow unescape мой текст здесь ... – Bing
Что вы ожидаете получить в результате? –