Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Drupal 6中将URI作为URL参数传递_Drupal_Url Rewriting - Fatal编程技术网

在Drupal 6中将URI作为URL参数传递

在Drupal 6中将URI作为URL参数传递,drupal,url-rewriting,Drupal,Url Rewriting,我在尝试将绝对URI作为启用了干净URL的参数传递时遇到了问题 我把hook_menu()设置成这样: function mymodule_menu() { return array( 'page/%' => array( 'title' => 'DBpedia Display Test', 'page callback' => 'mymodule_dbpedia_display', 'page arguments' => array(1),

我在尝试将绝对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(例如“”)传递给我的页面回调。我尝试了一些方法,但到目前为止没有任何效果


  • 完全破坏了Drupal的重写

  • 给出了404

  • 只返回“http:”,这很有意义

  • 我可能会使用$\u GET提取整个查询字符串,但我想我希望得到一个更“Drupal”的解决方案。有什么建议吗?

    如果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;
    }
    

    如果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;
    }
    

    我以前也遇到过这个问题,尝试做同样的事情(RDF浏览)。我通过在URI上使用rawurlencode和rawurldecode解决了这个问题

    所以在创建链接时

    l('Click Here', 'page/' . rawurlencode($uri));
    
    当使用$uri变量时,执行rawurldecode()

    它会给你一个URI,比如

    http://mysite.com/page/http%253A%252F%252Fdbpedia.org%252Fresource%252FCoffee
    

    我以前也遇到过这个问题,尝试做同样的事情(RDF浏览)。我通过在URI上使用rawurlencode和rawurldecode解决了这个问题

    所以在创建链接时

    l('Click Here', 'page/' . rawurlencode($uri));
    
    当使用$uri变量时,执行rawurldecode()

    它会给你一个URI,比如

    http://mysite.com/page/http%253A%252F%252Fdbpedia.org%252Fresource%252FCoffee
    

    这应该是可行的;这是一个好主意。您可以在该线程中尝试修补程序,但您最好的选择可能是在URL编码的基础上进行不同的编码,正如其他人所建议的那样;这是一个好主意。您可以在该线程中尝试修补程序,但您最好的选择可能是在URL编码的基础上进行不同的编码,正如其他人所建议的那样。

    使用
    page/%
    ,而不是使用
    page/%menu-trail
    %menu-trail
    将URL的其余部分作为单个字符串传递,在您的示例中,该字符串将作为
    $uri

    传递给菜单回调,而不是使用
    page/%
    ,使用
    page/%menu-trail
    %menu\u trail
    将URL的其余部分作为单个字符串传递,在您的示例中,该字符串将作为
    $uri

    传递到菜单回调。这比所有这些容易得多,只要您能够对自己的uri进行编码-阅读这些文档,所有秘密都将被揭示:


    干杯

    这比这容易多了,只要你能对自己的URI进行编码——阅读这些文档,所有的秘密都会被揭示出来:


    干杯

    这几乎奏效了。我认为关键不在于使用rawurlencode()(而不仅仅是urlencode()),而是它在与l()函数一起使用时得到了双重编码。然而,不知怎的,Drupal仍然看到第一个斜杠,arg(1)只返回“http:”。你是怎么做到的?这对我来说似乎很管用。我又检查了一遍,看起来还可以。我在灯堆上使用D7,不知道它是否会有任何区别。我应该提到我正在使用D6。似乎参数处理可能已更改。这几乎有效。我认为关键不在于使用rawurlencode()(而不仅仅是urlencode()),而是它在与l()函数一起使用时得到了双重编码。然而,不知怎的,Drupal仍然看到第一个斜杠,arg(1)只返回“http:”。你是怎么做到的?这对我来说似乎很管用。我又检查了一遍,看起来还可以。我在灯堆上使用D7,不知道它是否会有任何区别。我应该提到我正在使用D6。似乎争论的处理方式可能已经改变了。谢谢,如果归结到这一点,这将起到作用。但是,如果可能的话,我希望避免编码到难以辨认的东西。谢谢,如果归结到这一点,这将完成这项工作。不过,如果可能的话,我想避免编码到难以辨认的地方。谢谢。%menu_trail方法不像您描述的那样简单,但它引导我朝着正确的方向前进,我让它工作起来了。我找到了解决办法。我使用了一个%wildcard_load()函数将参数映射内爆回字符串。可惜这并不简单,但很有效。我的报告是用英文写的。事实上,我正在开发()的一个模块中使用它,它是有效的。您的用法是不同的。%菜单的尾部部分永远不会传递给回调。opensearch模块和核心搜索模块都使用search\u GET\u keys()直接从$\u GET提取参数。据我所知,%menu\u tail主要允许在URL中有额外斜杠时正确写入页面上的链接。D7的情况也是如此。感谢您指出opensearch模块,期待着在一些即将到来的项目中尝试。谢谢。%menu_trail方法不像您描述的那样简单,但它引导我朝着正确的方向前进,我让它工作起来了。我找到了解决办法。我使用了一个%wildcard_load()函数将参数映射内爆回字符串。可惜这并不简单,但很有效。我的报告是用英文写的。事实上,我正在开发()的一个模块中使用它,它是有效的。您的用法是不同的。%菜单的尾部部分永远不会传递给回调。opensearch模块和核心搜索模块都使用search\u GET\u keys()直接从$\u GET提取参数。据我所知,%menu\u tail主要允许在URL中有额外斜杠时正确写入页面上的链接。D7的情况也是如此。感谢您指出opensearch模块,期待着在一些即将到来的项目中尝试。