首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gsa双编码部分字段

gsa双编码部分字段
EN

Stack Overflow用户
提问于 2015-05-07 10:11:01
回答 2查看 309关注 0票数 0

我试图为GSA构建一个正确的查询字符串,其中包含用户选择的过滤器。查看google文档,我必须对值进行双倍编码。我编写了这个简单的函数,但是如果我选择一个包含特殊字符(例如:foo的笔)的过滤器,它就不能工作,而GSA返回0的结果。

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-08 12:31:03

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

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

希望能帮上忙。

致以敬意,

莫汉

票数 1
EN

Stack Overflow用户

发布于 2016-03-07 08:49:12

对于要发送到gsa的每个过滤器,我使用以下格式:

代码语言:javascript
复制
$inmeta[] = urlencode("<filter_name>=".$this->myUrlEncode(<filter_value>));

然后,我简单地将它们连接如下:

代码语言:javascript
复制
if(sizeof($inmeta)) {
                foreach($inmeta as $val) {
                    $inmeta_str .= "+inmeta:".$val;
                }
            }

使用此myUrlEncode():

代码语言:javascript
复制
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);
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30098011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档