gsa 双编码部分字段

gsa double encoding partialfields

我正在尝试使用包含用户 select 过滤器的部分字段为 GSA 构建正确的查询字符串。 查看 google documentation 我必须对值进行双重编码。 我写了这个简单的函数,但是如果我 select 一个包含特殊字符的过滤器(例如:foo 的笔)它不起作用并且 GSA returns 我得到 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中使用的这个函数returns foo%2527s%2520pen: &partialfields=metaname:foo%2527s%2520pen

此处的问题是由于您的元数据中的特殊字符 content/value。 由于您使用的是 partialfields 请求参数,请尝试使用 partialfields=metaname:foo 命中 GSA(在触发查询之前对其进行编码)。 这应该可以解决您的问题。

我很久以前就遇到过类似的问题,当时我修改了内容源以从元数据名称和内容中删除特殊字符。

希望对您有所帮助。

此致,

墨涵

对于每个发送到 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);
    }