我试图为GSA构建一个正确的查询字符串,其中包含用户选择的过滤器。查看google文档,我必须对值进行双倍编码。我编写了这个简单的函数,但是如果我选择一个包含特殊字符(例如:foo的笔)的过滤器,它就不能工作,而GSA返回0的结果。
protected function myUrlEncode($str) {
$str = rawurlencode($str);
$replacements = array('%2D', '%2E', '%7E');
$entities = array('-','.','~');
$str = str_replace($entities, $replacements, $str);
return urlencode($str);
}此函数返回在url:&partialfields=metaname:foo%2527s%2520pen中使用的foo%2527s%2520 the。
发布于 2015-05-08 12:31:03
在这里,问题在于元数据内容/值中的特殊字符。由于您使用的是partialfields请求参数,所以尝试使用partialfields=metaname:foo访问GSA (在触发查询之前对其进行编码)。这应该能解决你的问题。
早在很久以前,我就有过类似的问题,我修改了内容源,以便从元数据名称和内容中删除特殊字符。
希望能帮上忙。
致以敬意,
莫汉
发布于 2016-03-07 08:49:12
对于要发送到gsa的每个过滤器,我使用以下格式:
$inmeta[] = urlencode("<filter_name>=".$this->myUrlEncode(<filter_value>));然后,我简单地将它们连接如下:
if(sizeof($inmeta)) {
foreach($inmeta as $val) {
$inmeta_str .= "+inmeta:".$val;
}
}使用此myUrlEncode():
protected function myUrlEncode($str) {
$str = str_replace('%', '%25', $str);
$replacements = array('%20', '%2D', '%2E', '%7E', '%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%23', '%5B', '%5D');
$entities = array(' ', '-','.','~', '!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "#", "[", "]");
return str_replace($entities, $replacements, $str);
}https://stackoverflow.com/questions/30098011
复制相似问题