gpt4 book ai didi

javascript - 通过 URI 传递 "("和 ")"会导致 403 错误,我如何对它们进行编码?

转载 作者:行者123 更新时间:2023-11-30 07:01:12 25 4
gpt4 key购买 nike

(JavaScript 用于 XML HTTP 请求,PHP 用于执行 SQL 查询。)

我正在构建一个执行查询的网络应用程序。它使用 XMLHTTP 请求 GET 方法并将查询传递给执行它的 PHP 脚本。它工作正常,直到我在其中引入括号 ( )

这是一个工作原理的例子:

function executeQry(){
qry = document.getElementByID('textarea').value;
qryHTTPRequest(encodeURI(qry));
//I've also tried encodeURIComponent(qry);
}


function xmlHTTPRequest(qry){
//fetches
urlFetch = "http://my.url.com/script.php?qry=" + qry;
}

这是一个快速引用,我知道我的 xmlhttp 请求工作正常,因为当其他查询通过时它会执行它需要执行的操作,例如:

SELECT * FROM `tableName`

工作正常,但是当你尝试做类似的事情时

CREATE TABLE `new_table`
AS (SELECT * FROM `old_table`)

然后这是它不会执行的时候,我收到 403 错误,所以我认为这是 () 的错误,因为我什至在 PHP 本身上尝试了相同的代码,而不必通过它并且它起作用了,所以 URL 编码过程一定有问题吧?如果这是问题所在,是否有编码这些字符的方法?我假设还有其他字符未使用 encodeURI() 方法以及 encodeURIComponent() 进行编码。提前致谢!

最佳答案

下面应该这样做:

urlFetch = "http://my.url.com/script.php?qry=" + encodeURIComponent(qry)
.replace(/\(/g, "%28").replace(/\)/g, "%29");

圆括号是 URI 语法中的怪胎。许多编码器将它们视为特殊的,即使它们出现在过时“标记”产品中。使用常见的 Web 协议(protocol)(httphttpsmailto),将它们编码为 %28%29 尽管允许 Web 服务器为它们分配特殊含义。您已经在使用 encodeURIencodeURIComponent,因此您已经假设 URL 转义序列是 UTF-8。

来自 RFC 3986:

sub-delims    "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="

...

obsolete rule     translation
mark "-" / "_" / "." / "!" / "~" / "*" / "'"
/ "(" / ")"

关于javascript - 通过 URI 传递 "("和 ")"会导致 403 错误,我如何对它们进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8143085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com