gsa双重编码部分字段

时间:2015-05-07 10:11:01

标签: urlencode google-search-appliance

我尝试使用包含用户选择的过滤器的partialfiels为GSA构建正确的查询字符串。 看google documentation我必须对值进行双重编码。 我写这个简单的函数,但如果我选择一个包含特殊字符的过滤器(例如:foo' s pen),它就不起作用,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中使用的foo%2527s%2520pen: &安培; partialfields = metaname:FOO%2527s%2520pen

2 个答案:

答案 0 :(得分:1)

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

我有类似的问题很久以前我修改了内容源以从元数据名称和内容中删除特殊字符。

希望它有所帮助。

此致

莫汉

答案 1 :(得分:1)

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