0

我正在进行 Ajax 调用,将 URL 发送到 PHP 脚本。通常这些 URL 很复杂并且包含特殊字符。如果我在发送前不对URL 进行编码,PHP 脚本可以工作,但 URL 的值会被解释为我的值(这是预期的)。

如果我对不包含特殊字符的 URL 进行编码,例如“ http://google.com ”,XMLHttpRequest 会按预期将我的参数发送到我的 PHP 脚本,一切正常。

问题是当我对包含特殊字符的 URL 进行编码时,例如“ http://google.com?this=that&that=this ”——send() 永远不会到达我的 PHP 脚本。它只是无限期地挂起。没有错误或任何东西。我难住了。

这是我正在使用的:

function getContent(content, sumbittedUrl){
  var postContent = encodeURIComponent(content);
  var postUrl = encodeURIComponent(submittedUrl);
  var postString = 'content=' + postContent + '&url_get=' + postUrl;

  var httpRequest;

  //create XMLHttpRequest
  .
  .
  .

  httpRequest.onreadystatechange = alertContents;
  httpRequest.open('POST', 'php/my_php_script.php', true);
  httpRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  httpRequest.send(postString);
}

我是一名 JavaScript 新手,所以我可能(甚至可能)忽略了一些有更多经验的人会很快发现的东西。任何帮助,将不胜感激。谢谢。

4

1 回答 1

0

我找到了一个有点反气候的解决方案。我仍然不确定为什么 encodeURIComponent() 不能按预期工作,但破坏性较小的 encodeURI() 工作正常。encodeURI() 不会触及这些字符:; , / ? : @ & = + $因此 URL 的形式保持不变。潜在危险的字符(例如< >)仍然被编码。

不利的一面是,由于与号是不被编码的字符之一,这意味着服务器端需要更多的工作来整理传入的值。

编辑:

事实证明,这毕竟是一个服务器端问题。我一直在检索这些值。问题在于使用上述值的 cURL 请求。不要相信 PHP 错误/警告(或缺少它们)。

于 2013-06-28T17:15:21.287 回答