2

我正在使用 php 对 url 字符串进行 urlencoding,然后通过 curl 将其传递给 phantomjs 脚本,在该脚本中我试图使用 javascript 对其进行解码。

我开始:

localhost:7788/hi there/how are you/

变成:

 localhost:7788/hi+there%2Fhow+are+you

在 urlencode() 函数的 php 端。

在 phantomjs 方面,我有:

// Create serever and listen port 
server.listen(port, function(request, response) {    

function urldecode(str) {
   return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}    


        // Print some information Just for debbug 
        console.log("We got some requset !!!"); 
        console.log("request method: ", request.method);  // request.method POST or GET 
        console.log("Get params: ", request.url); //     

           url= urldecode(request.url);

        //-- Split requested params
      var requestparams = request.url.split('/');    


      console.log(urldecode(requestparams[1]));
      console.log(urldecode(requestparams[2]));

控制台的输出是:

.....
request method:  GET
Get params:  /hi%2Bthere/how%2Bare%2Byou
hi+there
how+are+you

为什么“+”号不替换为空格?我正试图摆脱它们,在我看来,函数 'urldecode' 应该这样做。

4

1 回答 1

4

您应该在 PHP 端使用rawurlencode()而不是urlencode(),所以空格是用%20而不是+符号编码的,所以 javascript 可以很好地用decodeURIComponent().

于 2013-10-21T15:38:18.263 回答