Передача URI в качестве аргументов URL в Drupal 6 - PullRequest
1 голос
/ 15 июня 2010

У меня проблемы с попыткой передать абсолютные URI в качестве параметров с включенными чистыми URL.

У меня есть hook_menu (), настроенный так:


function mymodule_menu() {
  return array(
    'page/%' => array(
      'title' => 'DBpedia Display Test',
      'page callback' => 'mymodule_dbpedia_display',
      'page arguments' => array(1),
    ),
  );
}

и на странице обратного вызова:


function mymodule_dbpedia_display($uri) {
  // Make an HTTP request for this URI
  // and then render some things
  return $output;
}

То, что я надеюсь сделать, это как-то передать полные URI (например, "http://dbpedia.org/resource/Coffee") на мой обратный вызов страницы. Я пробовал несколько вещей, и пока ничего не получалось ...

  1. http://mysite.com/page/http%3A%2F%2Fdbpedia.org%2Fresource%2FCoffee
    Полностью нарушает переписывание Drupal
  2. http://mysite.com/page/?uri=http%3A%2F%2Fdbpedia.org%2Fresource%2FCoffee
    Дает 404
  3. http://mysite.com/page/http://dbpedia.org/resource/Coffee
    Возвращает только "http:", что имеет смысл

Вероятно, я мог бы использовать $ _GET, чтобы вытащить всю строку запроса, но, думаю, я надеюсь на более «Drupal» решение. Есть предложения?

Ответы [ 5 ]

2 голосов
/ 15 июня 2010

У меня раньше была эта проблема, я пытался сделать то же самое (просмотр RDF). Я обошел его, используя rawurlencode и rawurldecode в URI.

Так что при создании ссылки делайте

l('Click Here', 'page/' . rawurlencode($uri));

и при использовании переменной $ uri выполните rawurldecode ();

$uri = rawurldecode($uri);

Это даст вам URI что-то вроде

http://mysite.com/page/http%253A%252F%252Fdbpedia.org%252Fresource%252FCoffee
1 голос
/ 15 июня 2010

Вместо использования page/% используйте page/%menu_trail.%menu_trail передаст оставшуюся часть URL-адреса как одну строку, которая в вашем примере будет передана обратному вызову меню как $uri.

1 голос
/ 15 июня 2010

Если источником URL-адресов является то, что вы контролируете, почему бы вам не использовать обратимую кодировку, такую ​​как base64, для кодирования строки и, следовательно, удаления любых хитрых символов, а затем выполнить декодирование при выполнении обратного вызова меню.Например:

$link = 'http://www.example.com?uri='. base64_encode($uri);

...


function mymodule_dbpedia_display($uri) {

$uri = base64_decode($uri);
// Make an HTTP request for this URI
// and then render some things
return $output;
}
0 голосов
/ 08 марта 2011

Это намного проще, чем все это, если вы можете кодировать свои собственные URI - прочитайте эти документы, все секреты будут раскрыты: drupal_urlencode ()

Приветствия

0 голосов
/ 15 июня 2010

Это должно просто работать;это известная ошибка в Drupal .Вы можете попробовать патчи в этой ветке, но лучше всего просто сделать другую кодировку поверх кодировки URL, как предлагали другие.

...