2016-10-14 3 views
0

В моей HTML страницы, у меня есть тэг формы (GET), который не имеет тип кодировки, поэтому было бы использоватьКак декодировать значения формы html из url в javascript?

application/x-www-form-urlencoded по умолчанию в соответствии с этим:

http://www.w3schools.com/tags/att_form_enctype.asp

Но тогда он кодирует пробелов в + знаков. Например, когда я прохожу

a b c & f, он превращает его в

a+b+c+%26+f в ссылке. Тогда, если я делаю яваскрипт decodeURIComponent функции я получаю

a+b+c+&+f, но то, что Javascript функции я называю, если я хочу оригинальную строку a b c & f? Я предпочитаю не заменять строки жесткого кода.

Кто-нибудь знает способ справиться с этим?

Благодаря

+0

Может быть, это полезно. http://stackoverflow.com/a/8649003 –

+0

Короткий ответ, как справиться с этим - сначала заменить знаки + пробелами, а затем декодировать остальные данные. Но вам действительно нужен синтаксический анализатор строки запроса. –

ответ

-1

Вы можете попробовать использовать функцию замены в JavaScript после получения строки из decodeURIComponent

str.replace("+", " "); 
or 
str.replace(/\+/g, ' '); 
+0

Я понял, что это способ, и вы имеете в виду 'str.replace (" + "," ")', но это действительно лучший способ? – omega

+0

Да, это приемлемый способ сделать это –

+0

заменит только первый экземпляр, как показано – charlietfl

0

Существует Jquery Pluggin, которые вы можете использовать. Here

Или заглянуть в эту Here

0

Обновление: вот статья, которую я написал об этом один раз для HTML Goodies: http://www.htmlgoodies.com/beyond/javascript/article.php/11877_3755006_2

Взгляните на простой ptq функции (синтаксический-The-запрос), одна из библиотеки функций я написал в 2001 году

function ptq(s, q) { 
    var i, p; 
    s = s.replace(/\+/g, ' ').replace(/;/g, '&').split('&'); 
    q = q || {}; 
    for (i=0; i<s.length; i++) { 
    p = s[i].split('=', 2); 
    q[unescape(p[0])] = unescape(p[1]); 
    } 
    return q; 
    } 

он работает даже с очень старыми версиями JavaScript, и использовать это просто:

var q = ptq(location.search.substring(1)); 
    /* grab query string after the initial "?" delimiter */ 

Свойство q будет соответствовать любому name=value пара, определенному в значениях форм HTML, представленных на текущий URL с помощью строки запроса GET запроса Select в.

Например, если HTML форма содержит поле с именем name с содержанием «Иосифом», и если эта форма представляются как определено его атрибутом action к HTML странице file.html то запрос GET будет «file.html? Имя = Joseph ", а значение q.name будет равно строковому литералу "Joseph".

Некоторые части кода, например escape/unescape, имеют более новые и предпочтительные эквиваленты, если в дальнейшем доступны функции JavaScript.

В результате углубления новой версии этого кода вы также можете использовать логические параметры в ваших URL-адресах, таких как «file.html? Name = Joseph & secure», хотя они никогда не будут созданы браузером при отправке HTML-формы. Это также проще в использовании. Просто напишите q = param(); в вашем коде, аналогично синтаксису модуля Cinc.Lincoln D. Stein's CGI.pm.

function ptq(q) 
{ 
    /* parse the query */ 
    /* semicolons are nonstandard but we accept them */ 
    var x = q.replace(/;/g, '&').split('&'), i, name, t; 
    /* q changes from string version of query to object */ 
    for (q={}, i=0; i<x.length; i++) 
    { 
    t = x[i].split('=', 2); 
    name = unescape(t[0]); 
    if (!q[name]) 
     q[name] = []; 
    if (t.length > 1) 
    { 
     q[name][q[name].length] = unescape(t[1]); 
    } 
    /* next two lines are nonstandard */ 
    else 
    { 
     q[name][q[name].length] = true; 
    } 
    } 
    return q; 
} 

function param() 
{ 
    return ptq(location.search.substring(1).replace(/\+/g, ' ')); 
} 

Обратите внимание, что в этой новой редакции все поля формы возвращаются как массивы. Это гораздо более уместно, так как стандарт допускает несколько полей формы с тем же именем, что означает, что правильным типом данных для значения поля формы является массив строк.

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