2015-05-07 2 views
0

Я пытаюсь построить правильную строку запроса для GSA с partialfiels, которая содержит фильтры, выбранные пользователями. Глядя на google documentation Мне нужно удвоить значения кодировки. Я пишу эту простую функцию, но если я выберу фильтр, содержащий специальные символы (например, пера foo), это не сработает, и GSA вернет мне 0 результатов.gsa double encoding partialfields

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

+1

Вы можете предоставить свое решение? –

+0

Я добавляю ответ на сообщение .. надежда - это то, что вы ищете :) – user3160178

ответ

1

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

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

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

С уважением,

Mohan

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); 
    } 
+0

Я плохо разбираюсь в php, так как вижу, что у вас есть тот же результат foo% 2527s% 2520pen ?? –

+0

извините .. Я не помню точно, что было моим решением, но я думаю, что я решил использовать inmeta вместо partialfields. Попробуйте посмотреть URL-адрес, созданный GSA в переднем конце по умолчанию при использовании фильтров .. вы должен увидеть, в чем проблема с вашим запросом – user3160178

 Смежные вопросы

  • Нет связанных вопросов^_^