当我的变量中有“#”时,为什么字符串不能正确传递到服务器?
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,就像我在上面的第一个示例中所做的那样. (还有一些其他字符也是允许的,但如果您开始使用这些字符,为了安全起见,请按照第二个示例进行编码。)
我正在尝试对对象进行字符串化,但当对象中有“#”时,我的 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,就像我在上面的第一个示例中所做的那样. (还有一些其他字符也是允许的,但如果您开始使用这些字符,为了安全起见,请按照第二个示例进行编码。)