Избавиться от двойных дефисов в Javascript? - PullRequest
4 голосов
/ 17 июня 2009

У меня есть букмарклет Javascript, который при нажатии перенаправляет пользователя на новую веб-страницу и вводит URL старой веб-страницы в качестве параметра в строке запроса.

Я сталкиваюсь с проблемой, когда исходная веб-страница содержит двойной дефис в URL (например, page--1--of--3.html). Глупо, я знаю - я не могу контролировать исходную страницу Я использую функцию javascript escape, не экранирующую дефис, и IIS 6 выдает ошибку «файл не найден», если его просят обслужить resource.aspx?original=page--1--of--3.html

Есть ли альтернативная функция выхода из JavaScript, которую я могу использовать? Как лучше всего решить эту проблему? Кто-нибудь знает, почему IIS подавляется resource.aspx?original=page--1, а не page-1?

Ответы [ 4 ]

4 голосов
/ 17 июня 2009

«escape» и «unescape» устарели именно потому, что они не кодируют все соответствующие символы. НЕ ИСПОЛЬЗУЙТЕ ESCAPE ИЛИ UNESCAPE . используйте взамен «encodeURIComponent» и «decodeURIComponent». Поддерживается во всех браузерах, кроме самых старых. Это действительно огромный позор, это знание не намного более распространено.

(см. Также encodeURI и decodeURI)

edit: ошибка только что протестирована, но на самом деле это еще не касается двойных дефисов. К сожалению.

2 голосов
/ 17 июня 2009

Можете ли вы расширить функцию escape с помощью некоторой пользовательской логики для кодирования гипса вручную?

resource.aspx?original=page%2d%2d1%2d%2dof%2d%2d3.html

Примерно так:

function customEscape(url) {
    url = escape(url);
    url = url.replace(/-/g, '%2d');
    return url;
}

location.href = customEscape("resource.axd?original=test--page.html");  

Обновление для букмарклета:

<a href="javascript:location.href=escape('resource.axd?original=test--page.html').replace(/-/g, '%2d')">Link</a>
1 голос
/ 17 июня 2009

- используется для комментирования текста на нескольких языках сценариев. SQL Server использует его для добавления комментариев. Используете ли вы логику базы данных для хранения этих имен файлов? Или создать какие-либо запросы, где это имя является частью строки запроса вместо использования параметров запроса?

1 голос
/ 17 июня 2009

Вы делаете что-то еще не так. - законно в URL и именах файлов. Может быть, файл действительно не найден?

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