частичные поля с двойным кодированием gsa

Я пытаюсь создать правильную строку запроса для 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);
}

эта функция возвращает foo% 2527s% 2520pen, который я использую в URL: & partialfields = metaname: foo% 2527s% 2520pen


person user3160178    schedule 07.05.2015    source источник
comment
вы можете предложить свое решение?   -  person cylinder.y    schedule 05.03.2016
comment
Добавляю ответ на пост .. надеюсь, это то, что вы ищете :)   -  person user3160178    schedule 07.03.2016


Ответы (2)


Здесь проблема связана со специальным символом в вашем содержании / значении метаданных. Поскольку вы используете параметр запроса partialfields, попробуйте использовать GSA с partialfields = metaname: foo (закодируйте его перед запуском запроса). Это должно решить вашу проблему.

У меня была похожая проблема, когда я изменил источники контента, чтобы удалить специальные символы из имени и контента метаданных.

Надеюсь, это поможет.

С уважением,

Мохан

person Mohan kumar    schedule 08.05.2015

для каждого фильтра, отправляемого в 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);
    }
person user3160178    schedule 07.03.2016
comment
Я плохо разбираюсь в php, так как вижу, что у вас тот же результат foo% 2527s% 2520pen ?? - person cylinder.y; 07.03.2016
comment
извините .. Я точно не помню, что было моим решением, но я думаю, что решил использовать inmeta вместо частичных полей .. Попробуйте посмотреть URL-адрес, созданный GSA в интерфейсе по умолчанию, когда вы используете фильтры ... вы должны увидеть в чем проблема с вашим запросом - person user3160178; 08.03.2016