ASP не распознает начальный пробел при вычислении длины строки

#javascript #asp-classic

#javascript #asp-классический

Вопрос:

Эта многострочная строка, созданная браузером, имеет ожидаемую длину:

 <script type="text/javascript">
var s = "
    a";
document.write(s.length);
</script>
  

Выводит 5

Но при выполнении как scritp на стороне сервера ASP он выдает 1:

 <%@ Language=JavaScript %>
<%
var s = "
    a";
Response.Write(s.length);
%>
  

Происходит то, что версия Javascript для ASP использует начальные пробелы при использовании в многострочных строках.

Как заставить версию ASP вести себя так же, как версия браузера?

Комментарии:

1. Мой Google-fu предлагает вам попробовать len(s) ;

2. len() — это vbscript: возможно, вы путаете ASP с языком…

3. чего вы пытаетесь достичь — вы просто используете многострочность для удобства чтения кода (поскольку строка фактически не будет содержать никаких разрывов строк)? Я думаю, что суть в том, что, поскольку этот подход является «нестандартным», вы не можете полагаться на разные хосты, ведущие себя одинаково.

4. @Тим Уильямс Да, удобочитаемость. Я использую его для написания динамических SQL-запросов, которые выглядят некрасиво в исходном коде при объединении строк. Чтобы сделать разрыв строки, я заканчиваю строку символом ` n `. Такое поведение не является проблемой при чтении запроса в исходном коде, но когда я хочу показать реальный запрос в браузере с замененными параметрами, он выравнивается по левому краю, поскольку начальные пробелы теряются.

Ответ №1:

Если вы добавляете в начале строки, asp распознает пробелы.

 <%@ Language=JavaScript %>
<%
var s = "
    a";
Response.Write(s.length);
%>
  

Я не был знаком с использованием символа для создания многострочных строк. Отличная штука, но я не смог найти документацию для этого. Я предполагаю, что это просто экранирование разрыва строки? У вас есть ссылка на ссылку?

Отредактируйте Дополнительно этот код:

 <pre>
<%
var s = "
    unescaped";
Response.Write(s);
Response.Write("n");
s = "
    escaped";
Response.Write(s);
%>
</pre>
  

Выдает такой результат:

 unescaped
    escaped
  

Комментарии:

1. Похоже, ваше решение достаточно хорошо. Как указал Тим, это нестандартное использование. Но простой поиск в Google показывает, что он принимается всеми браузерами.

Ответ №2:

Если вы пытаетесь увидеть несколько пробелов в html, следует отметить, что при визуализации html несколько пробелов будут свернуты. Используйте 'amp;nbsp' , когда в выводе html требуется неразрывный пробел.

Комментарии:

1. Я визуализирую его, заключенный в <pre> тег, который сохраняет пробелы. Проблема в том, что ASP-версия javascript «съедает» начальные пробелы в многострочных строках, как показано при проверке длины строки.