当我的变量中有“#”时,为什么字符串不能正确传递到服务器?

Why does string not pass correctly to server when there is a '#' in my variable?

我正在尝试对对象进行字符串化,但当对象中有“#”时,我的 url 没有正确 return。

我输出了 JSON.stringify($scope.parameter); 的值,它是正确的,但是 url 不是。

$scope.parameter = '#' + parameter;

var url = $scope.url + '&functions=' + JSON.stringify($scope.parameter);

我希望它是 {"1":"i001::#11 object"}

但它实际上是 {"1":"i001::

因为您没有正确编码,所以它被解释为片段标识符(# 引入了片段标识符)。

您必须 URI-encode 放入 URI 的内容:

var url = $scope.url + '&functions=' + encodeURIComponent(JSON.stringify($scope.parameter));
// ------------------------------------^

从技术上讲,您也必须在上面 URI-encode functions,但是由于 functions 的 URI-encoded 版本是,呃,functions,我没有打扰上面。但如果它不一定安全,那么:

var url = $scope.url + '&' + encodeURIComponent(key) + '=' + encodeURIComponent(JSON.stringify($scope.parameter));

如果您在 name=value 对中使用的名称中只有数字、字母、下划线和破折号,您可以安全地省略它们的 URI-encoding,就像我在上面的第一个示例中所做的那样. (还有一些其他字符也是允许的,但如果您开始使用这些字符,为了安全起见,请按照第二个示例进行编码。)