что \ делает на не экранирующих символах? - PullRequest
5 голосов
/ 09 декабря 2010

Я плохо задал другой вопрос , поэтому я спрошу кое-что еще.

Согласно http://www.c -point.com / javascript_tutorial / special_characters.htm есть несколько escape-символов, таких как \ n и \ b. Однако / не является одним из них. Что происходит в этом случае? (\/) \ игнорируется?

У меня есть строка в JavaScript 'http:\/\/www.site.com\/user'. Не то, чтобы это был литерал с ', поэтому с " это выглядело бы как \\/ в любом случае я хотел бы избежать этой строки, таким образом, вопрос о том, что происходит с не 'специальными' escape-символами.

И еще один вопрос: если у меня было name:\t me (или "name:\\t me", есть ли функция, позволяющая избежать его, чтобы была вкладка? Я использую C #, и эти строки взяты из файла JSON

Ответы [ 4 ]

4 голосов
/ 09 декабря 2010

По словам Мозиллы:

Для символов, не перечисленных [...], предыдущая обратная косая черта игнорируется, но это использование не рекомендуется и следует избегать.

https://developer.mozilla.org/en/JavaScript/Guide/Values%2c_Variables%2c_and_Literals#section_19

Последовательность \/ не указана в списке, но существует по крайней мере два распространенных варианта использования:

<1> Необходимо избегать буквальных слешей в регулярных выражениях, которые используют синтаксис /foo/:

var re = /^http:\/\//;

<2> Необходимо избегать недопустимого HTML, когда вы встраиваете код JavaScript в HTML:

<script type="text/javascript"><!--
alert('</p>')
//--></script>

... триггеры: конечный тег для элемента "P", который не открыт

<script type="text/javascript"><!--
alert('<\/p>')
//--></script>

... нет.

1 голос
/ 09 декабря 2010

\ оценивается как \ if \ + следующий символ не является escape-последовательностью.

Примеры:
\ t -> escape-последовательность t -> tab
\\ t -> escape \ and t -> \ t
\\ -> escape-последовательность \ -> \
\ c -> \ c (не escape-последовательность)
\ a -> escape-последовательность a -> ???

Обратите внимание, что на совершенно странных символах есть escape-последовательности, поэтому будьте осторожны. ИМХО нет хорошего стандарта между языками и операционными системами.

И на самом деле, это еще более нестандартно: в базовом C '\ y' -> y + предупреждение, а не \ y. Так что это очень зависит от языка, будьте осторожны. (не обращайте внимания на мой комментарий ниже).

ш

Юха

edit: Какой язык вы используете? = Java и c ведут себя немного по-разному.

C и java, похоже, имеют одинаковые escape-коды, а python имеет разные: http://en.csharp -online.net / CSharp_FAQ: _What_are_the_CSharp_character_escape_sequences
http://www.cerritos.edu/jwilson/cis_182/language_resources/java_escape_sequences.htm
http://www.java2s.com/Code/Python/String/EscapeCodesbtnar.htm

1 голос
/ 09 декабря 2010

Если перед символом обнаруживается обратная косая черта, которая не имеет значения в качестве escape-последовательности, она будет игнорироваться, т. Е. "\/" и "/" - это одна и та же строка в Javascript.

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

/[a-z]/[0-9]/   // Invalid.

/[a-z]\/[0-9]/  // Matches a lowercase letter, followed by a slash,
                // followed by a digit.

Наконец, если вы хотите свернуть обратную косую черту, за которой следует символ, в соответствующую escape-последовательность, выдолжны заменить все выражение:

string expr = "name:\\t me";       // Backslash followed by `t`.
expr = expr.Replace("\\t", "\t");  // Tab character.
0 голосов
/ 09 декабря 2010

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

Если вы используете string myString = "\t";, строка на самом деле будет содержать символ TAB, а не просто представлять его. Вы можете проверить это, проверив myString.Length, что равно 1.

Если вы хотите отправить символы "обратная косая черта" и "t" вашему клиенту JSON, вам нужно будет сказать компилятору, чтобы он держал руки подальше от обратной косой черты, избегая обратной косой черты:

string myString = "\\t"; приведет к строке из двух символов, «обратной косой черты» и «t».

Вещи становятся беспорядочными, если вам приходится пересекать несколько слоев побега и ухода, попробуйте отладить эти слои, чтобы увидеть, что на самом деле происходит под капотом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...