如何通过PHP获取Page body中的URL参数?

ohh*_*hho 5 php drupal

在Drupal站点上,为页面正文内容启用了PHP代码.如何在PHP代码中获取参数及其值?例如,我想获得ref33002来自:

http://example.com/node/1?ref=33002
Run Code Online (Sandbox Code Playgroud)

在以下代码中:

<?php 
  print arg(0);
  print arg(1);
  print arg(2);
  print arg(3);
?>
Run Code Online (Sandbox Code Playgroud)

我可以node1,但一无所知ref33002.

谢谢!

kli*_*fia 13

您可以使用drupal_get_query_parameters(),如下所示:

$params = drupal_get_query_parameters();

if (isset($params['ref']) && is_numeric($params['ref'])) {
  var_dump(check_plain($params['ref']));
}
Run Code Online (Sandbox Code Playgroud)

  • 老实说,这应该是公认的答案 (2认同)

cro*_*ked 10

用这个:

<?php
$a=$_REQUEST['ref'];
echo "The value of the ref parameter is ".$a;
?>
Run Code Online (Sandbox Code Playgroud)

  • 这有效,但我不建议在Drupal环境中使用它.看我的回答. (2认同)

mar*_*end 6

crowicked的解决方案有效,但"Drupal方式"是将ref值作为url参数传递,即:

http://example.com/node/1/33002
Run Code Online (Sandbox Code Playgroud)

现在您可以使用arg()函数访问ref值:

$ref = arg(2);
Run Code Online (Sandbox Code Playgroud)

当然,只有当ref值始终是第三个参数时,这样的方法才有效.

即使上面的代码有效,也不建议将php脚本放在节点体中.它使您的网站难以维护和调试.当编辑器意外删除您的php节点时,将会破坏您的网站.

如果你有一个想要运行的php脚本,最好的方法是在你的站点上添加一个简单的自定义模块来实现hook_menu.查看Menu Example模块或此hello world模块以了解有关hook_menu的更多信息.

最后,无论您选择哪种方法(php节点或自定义模块),都要确保清理url输入,例如使用check_plain().

  • 只有在事先知道您的参数排序时才使用此选项. (2认同)