Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript将“%”发送到API_Javascript_Php_Ajax_Urlencode_Restful Url - Fatal编程技术网

使用JavaScript将“%”发送到API

使用JavaScript将“%”发送到API,javascript,php,ajax,urlencode,restful-url,Javascript,Php,Ajax,Urlencode,Restful Url,在我们的RESTfulAPI中,我们使用RQL解析URL-s并用它构建查询。这是一个查询示例: http://www.example.com/resource?resource.name~=%Some name% 转化为一个LIKE操作符 然后,在我们的前端,我们实现了一个搜索字段,其中的更改会触发一个ajax请求: "http://www.example.com/resource?resource.name~=%'+查询+'%' 当然,存在一个bug-每个与%的特殊组合都会在服务器端转换为一个

在我们的RESTfulAPI中,我们使用RQL解析URL-s并用它构建查询。这是一个查询示例:

http://www.example.com/resource?resource.name~=%Some name%

转化为一个LIKE操作符

然后,在我们的前端,我们实现了一个搜索字段,其中的更改会触发一个ajax请求:

"http://www.example.com/resource?resource.name~=%'+查询+'%'

当然,存在一个bug-每个与%的特殊组合都会在服务器端转换为一个字符,导致查询不返回任何结果

如何解决

我试着把整件事都做完了?但它变得更糟,例如resource.name~%3D%25befr%25,它作为查询字符串befr


我不知道如何解决这个问题。

查询字符串的组件是键名和值

?key=value&key=value
不要对=字符进行编码。它们不是组件的一部分,而是将组件拆分

var url = 'http://www.example.com/resource?' +
    encodeURIComponent("resource.name~") +
    "=" + 
    encodeURIComponent("%" + query + "%");

查询字符串的组件是键名称和值

?key=value&key=value
不要对=字符进行编码。它们不是组件的一部分,而是将组件拆分

var url = 'http://www.example.com/resource?' +
    encodeURIComponent("resource.name~") +
    "=" + 
    encodeURIComponent("%" + query + "%");

尝试简单地将%替换为其URL编码的等效%25

尝试简单地将%替换为其URL编码的等效%25

您面临的服务器端错误是什么?很难找到未知问题的解决方案。提示!使用而不是~=并且是否需要添加或修剪%?正如我所说的:每个带有%的特殊组合都会在服务器端转换为一个字符,导致查询不返回任何结果。。例如,尝试搜索以b开头的内容时,会转到包含%b的URL,这是一个特殊的组合,表示可以在MYSQL上修剪的字符,然后从“query”中选择TRIMBOTH“%”;好吧,我想你是想为一个有缺陷的服务器找到一个解决办法。相反,服务器似乎做了正确的事情:按照URI规范的要求处理%转义序列。您面临的服务器端错误是什么?很难找到未知问题的解决方案。提示!使用而不是~=并且是否需要添加或修剪%?正如我所说的:每个带有%的特殊组合都会在服务器端转换为一个字符,导致查询不返回任何结果。。例如,尝试搜索以b开头的内容时,会转到包含%b的URL,这是一个特殊的组合,表示可以在MYSQL上修剪的字符,然后从“query”中选择TRIMBOTH“%”;好吧,我想你是想为一个有缺陷的服务器找到一个解决办法。与此相反,服务器似乎做了正确的事情:按照URI规范的要求处理%转义序列。是的,难以置信,但确实如此简单。是的,难以置信,但确实如此简单。你是对的。然而,我发现@Quentin的解决方案更好,因为它使用函数而不是硬编码字符串。但是这个技巧还是加上一个。这对这个特定的查询有效,因为它没有任何特殊的字符,但在一般情况下是一个糟糕的方法。你是对的。然而,我发现@Quentin的解决方案更好,因为它使用函数而不是硬编码字符串。但是对于这个技巧还是加上一个。这对于这个特定的查询是有效的,因为它没有任何特殊的字符,但是在一般情况下是一个糟糕的方法。