2014-11-12 3 views
0

Для вызова следующего URL-адреса в Javascript.Использование «&» и «+» в Querystring

var par = "Participant.aspx?ID=" + Id + "&NAME=" + Name+ "&FIRSTNAME=" + Firstname; 

Иногда имя или первое имя содержат знак «амперсанд» или «плюс».

For Example:  Richard & Michael or Richard + Michael 

На ServerSide я прочитал Qeurystring как:

 Dim Name As String = Request.QueryString("NAME") 
     Dim Firstname As String = Request.QueryString("FIRSTNAME") 

Моя проблема заключается в том, что если QueryString содержит знак «плюс», то знак преобразуется в пространство («»), и если Qeurystring содержит «амперсанд», затем все после удаления «амперсанда».

Я пробовал несколько вещей. Request.Form вместо Reqeust.Querystring и я также попробовал Server.URLEncode. Но оба не подходят.

С URLEncode проблема заключается в том, что если Querystring содержит пробелы между именем и знаком «плюс», пробелы также преобразуются в знаки «плюс».

У вас есть идея, как это решить?

+4

* С UrlEncode проблема, что если QueryString содержит пробелы между именем и знаком «плюс», пространства также преобразуются в знаки «плюс». * - вот что должно произойти. Знак плюс обозначает пространство. Закодированный знак плюса обозначает знак плюса. Похоже, вы уже решили эту проблему. –

+0

@AntP: Когда я задал вопрос, теги были 'javascript' и' C# '. Но да, образец кода * есть * VB.Net. :-) –

ответ

1

Помните, что содержимое строки запроса (как имена, так и значения) должно быть правильно закодировано в URI. Если эта строка находится в JavaScript, вы бы сделать это так:

var par = "Participant.aspx?ID=" + encodeURIComponent(Id) + 
      "&NAME=" + encodeURIComponent(Name) + 
      "&FIRSTNAME=" + encodeURIComponent(Firstname); 

(Технически, опять же, имена должны быть закодированы тоже, но «ID», «NAME», и «FIRSTNAME» закодировать точно то же самое, так что я не использовал encodeURIComponent на них)

См AntP's comment повторно в плюс знаки и пробелы:.

«с UrlEncode является проблема, что если QueryString содержит пробелы между именем и знак «плюс», пробелы также преобразуются в знаки «плюс». - это то, что должно было произошло. Знак плюс обозначает пространство. Закодированный знак плюса обозначает знак плюса.

+1

Хм, я думаю, что это проблема с кешем. Я удалил кеш, и теперь он работает как ожидалось :). СПАСИБО – Paks

1

Вы можете использовать предопределенные UrlEncode и UrlDecode методы. Эти методы помогут вам передать специальные символы в строках запроса. Взгляните на эти примеры.

UrlDecode и UrlEncode
надеюсь, что это вам поможет.

-1

эй есть другой путь:

перед передачей его в строку запроса просто заменить:

.Привернуть ("&", "% 26");

на другой странице автоматически считывать% 26, как &, но тогда и не читать &, просто снова заменить:

.Заменить («% 26», «&»);

2

Вы можете использовать encodeURIComponent для значения строки запроса, а затем установить его в качестве строки запроса

var url = encodeURIComponent($("#<%=hdnPageQuery.ClientID%>").val()); 
    var title = encodeURIComponent(document.title); 
    var redirectUrl = $("#<%=hdnPageTarget.ClientID%>").val(); 
    var outputUrl = redirectUrl + '?url=' + url + '&title=' + title; 
    $('#ancSendToFriendLink').attr('href', outputUrl); 
Смежные вопросы