Javascript window.prompt с переменной, содержащей обратную косую черту - PullRequest
0 голосов
/ 20 сентября 2011

У меня есть страница с гиперссылками (естественно), которая построена из таблицы SQL, но некоторые гиперссылки на самом деле являются сетевыми ресурсами (т. Е. \ Server \ path). Для тех, кто настроил оператор jQuery, чтобы найти их и заменить эти <a href> теги на <a onclick='window.prompt...>, чтобы сетевое расположение находилось в текстовом поле приглашения, тогда пользователи могли скопировать его и вставить в проводник Windows. Проблема в том, что все обратные слеши удаляются. Я знаю, что вы обычно должны избегать их с двойной обратной косой чертой. Я не помещаю пути вручную, они приходят из таблицы SQL, и я помещаю их в приглашение, используя переменную. Кто-нибудь может сказать, есть ли решение?

else if (($link.length > 0) && ($link.substring(0, 4) != "http")) {
  $('.linktext', $this.closest('tr')).after("<span><a href='#link' onclick='window.prompt(\"This resource is located on a network drive and is not accessible via the web browser. Please copy the link and paste into Windows Explorer.\",\""+$link+"\");'>Text</a></span>");
}

Подсказка работает, но текстовая область будет выглядеть именно так \serverfolder1folder2file.ext

Ответы [ 3 ]

1 голос
/ 20 сентября 2011

Используйте две обратные косые черты вместо одной: \\server\\path.

Обратная косая черта в строках JavaScript / Регулярные выражения имеют особое значение, чтобы быть escape-символом:

var stringWithNewLine = "This
doesn't work"; //Error

var stringWithNewLine = "This\ndoes work"; //Escaped new-line feed.
0 голосов
/ 21 сентября 2011

Я только что подумал о простом решении, которое может «экранировать» значения URL после их загрузки из SQL.Таким образом, я могу выборочно указывать, что нужно экранировать, и оставлять обычные http-URL такими, какие они есть:

else if (($link.length > 0) && ($link.substring(0, 4) != "http")) {
            $linkescaped = $link.replace(/\\/g, "\\\\");
            $('.filter', $this.closest('tr')).after("<span><a href='#link' onclick='window.prompt(\"This resource is located on a network drive and is not accessible via the web browser. Please copy the link and paste into Windows Explorer.\",\""+$linkescaped+"\");'></a></span>");
        }
0 голосов
/ 20 сентября 2011

mysql_real_escape_string() - ваше решение.

echo mysql_real_escape_string("hello\world");

вывод

hello\\world

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

...