2014-11-13 4 views
0

Я знаю, что PHP unescape строка, как она выводится. Но я не понимаю, почемуКак PHP не создает строку?

echo "\\\/"; 

генерирует результат

\\/ 

Кто-нибудь есть идеи?

+0

И что должно быть результатом? –

+0

См. Мое редактирование. Это забавно StackOverflow unescape мой текст здесь ... – Bing

+0

Что вы ожидаете получить в результате? –

ответ

1

Mh, я думаю, самый простой способ понять это, глядя на примеры просмотра:

echo "/"; =/
echo "//"; = // 
echo "///"; = /// 

echo "\"; = syntax error 
echo "\\"; = \ 
echo "\""; = " 
echo "\\\" = syntax error 
echo "\\\/"; = \\/ 

Почему? Колодец \ используется для экранирования. Последний пример - экранирование с помощью \\ и / с \/. Хотя / не нуждается в каких-либо побегах, это не повредит.

Вы можете задаться вопросом, почему echo "\\\" не работает. Но если вы обратите пристальное внимание, вы заметите, что \\ в порядке, но тогда третий \ считается побегом для " в конце строки, которая, очевидно, не должна быть экранирована, следовательно, синтаксическая ошибка.

+0

. Должен ли последний случай выдавать ОДИН косую черту и ОДИН для перемотки вперед? – Bing

+0

@Bing Нет, поскольку '/' не нуждается в escape-доступе. Вы можете попробовать это и с другими символами: 'echo '\ o"; ' –

+0

Нет, потому что \ escape-код второй \ и все. Третий \, не имеющий специального символа справа, не считается ускользающим персонажем и взят как есть, поэтому \\/ –

0

Обратная косая черта - специальный символ в строковых литералах PHP. Он используется для удаления символов. Например, если вы хотите, чтобы написать цитату внутри строки в кавычках, он должен быть экранированы, чтобы избежать неоднозначного/неправильный синтаксис:

echo "\""; // (Because otherwise, WTF exactly would """ mean?!) 

С обратной косой черты специальный символ, там должен быть способ сделать он «неспециалист», чтобы избежать его специальных свойств. Если вы хотите, чтобы написать один обратный слэш в строке, вы должны избежать этого:

echo "\\"; // (Because "\" would be a syntax error, since the " would be escaped.) 

Так в "\\\/", есть один спасся слэш (\\\), а затем есть еще одна обратная дробная черта. Так как эта вторая (третья) обратная косая черта не сопровождается каким-либо двусмысленным символом, она принимается как есть (то есть \/ не означает ничего особенного, поэтому это просто означает «\ /»). Итак, у вас есть три фактических символа в этой строке: \, \ и /.

Обратите внимание, что это будет ошибка синтаксиса:

echo "\\\"; 

Поскольку первая пара не один обратный слэш, а затем \", что сбежавший ", а потом нет «реального» " потом до конца строки ,

0

Если персонаж, указанный ниже \, не представляет a valid escape sequence, он будет оставлен как есть.

Образец \\ является допустимой escape-последовательностью, поэтому он заменяется на один \.
Образец \/: не действительная последовательность эвакуации, поэтому она оставлена ​​одна.

0

Символ обратной косой черты имеет несколько применений. Во-первых, если за ним следует не алфавитно-цифровой символ, он убирает любое особое значение, которое может иметь этот символ.Это использование обратной косой черты в качестве escape-символа применяется как внутри, так и снаружи классов символов.

Например, если вы хотите совместить символ «*», вы пишете «*» в шаблоне. Это относится к тому, будет ли иначе следующий символ интерпретироваться как метасимвол, поэтому всегда безопасно предшествовать не буквенно-цифровому символу с буквой «\», чтобы указать, что он обозначает себя. В частности, если вы хотите совместить обратную косую черту, вы пишете «\».

Примечание: Одиночные и двойные кавычки строк PHP имеют особое значение обратного слэша. Таким образом, если \ нужно сопоставить с регулярным выражением \, то в PHP-коде должны использоваться «\\» или «\\».

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