2010-10-12 1 views
3

У меня проблема с JS-кодировкой, а затем с расширением на C#-сервере. Я использую функцию javascript encode(), но когда у меня есть специальные символы, такие как +, у C# есть httputility.urldecode() ->, и он преобразует его, как если бы это был символ SPACE.Проблемы с кодировкой строки декодирования JS <-> C#

Каков наилучший способ передачи JS-кодирования и декодирования C#?

У меня есть <a href='javascript:foo(escape('hello +'))' />

function foo(data) 
{ 
$.ajax({ url: "http:/....." + data, dataType: 'html', context: document.body 
... 
... 
} 

Я отлажена сервер, и я получаю 'привет ++' - это не знает, который + есть что (пробел или +) Спасибо!

ответ

2

Javascript encodehtml encoding. Поскольку + действителен в HTML, он ничего не делает для +.

Однако вы передаете эту строку через URL-адрес - + по URL-адресу означает кодированное пространство.

Вы должны использовать яваскрипт encodeURIComponent если вы хотите + быть закодированы правильно для потребления на стороне сервера:

<a href='javascript:foo(encodeURIComponent('hello +'))' /> 

Вы должны понимать, что HTML-кодирование и кодирование URL являются different things.

+0

Все еще не работает. JS передает '+' серверу, но он все еще декодирует + как '' – Himberjack

+0

. Как он передает '+' серверу? Вероятно, вы должны кодировать '+' перед его передачей, как в URL + _is_ кодировке для пробела. – Oded

+0

Я убегаю («blalblba +») – Himberjack

2

JavaScript:

escape(string); 

C#:

Microsoft.JScript.GlobalObject.unescape(string); 

это сочетание отлично работает для меня.

-1

Нет необходимости делать кодирование в javascript и декодировать в C#. Просто используйте функцию javascript 'encodeURIComponent (string) и не нужно вносить какие-либо изменения в код C#.

 Смежные вопросы

  • Нет связанных вопросов^_^