Почему я не могу URL кодировать этот URL в node.js? - PullRequest
2 голосов
/ 04 сентября 2011
$node
querystring = require('querystring')
var dict = { 'q': 'what\'s up' };
var url = 'http://google.com/?q=' + querystring.stringify(dict);
url = encodeURIComponent(url);
console.log(url);

Результат таков:

"http://google.com/?q=q=what's%20up"

Обратите внимание, что одинарная кавычка не закодирована правильно.Что-то не так с модулем node.js?

Ответы [ 2 ]

12 голосов
/ 04 сентября 2011

' допускается в виде простого запроса URI.Вот соответствующие правила производства для запроса URI в соответствии с RFC 3986 :

query         = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded   = "%" HEXDIG HEXDIG
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

Как видите, подпункты содержит равнину '.Таким образом, результат действителен.

4 голосов
/ 04 сентября 2011

он закодирован правильно, если вы введете тот же запрос в поле поиска Google вручную, вы получите этот адрес:

http://www.google.cz/#hl=cs&cp=8&gs_id=u&xhr=t&q=what's+up&pf=p&sclient=psy&site=&source=hp&pbx=1&oq=what's+u&aq=0&aqi=g5&aql=&gs_sm=&gs_upl=&bav=on.2,or.r_gc.r_pw.&fp=792ecf51920895b2&biw=1276&bih=683

обратите внимание, что &q=what's+up& part

и encodeURIComponent - это не модуль Node.js, а часть стандартной библиотеки javascript

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURIComponent

ручной обходной путь:

$node
querystring = require('querystring')
var dict = { 'q': 'what\'s up' };
var url = 'http://google.com/?q=' + querystring.stringify(dict);
url = encodeURIComponent(url);
url = url.replace(/'/g,"%27");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...