php 超链接里的参数如何传递数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 超链接里的参数如何传递数组相关的知识,希望对你有一定的参考价值。

例如:$names = array("11","22","33");
$url="localhost/m/index.php?names=".$names这样不对呀!!!求正解!!

需要准备的材料分别是:电脑、php编辑器、浏览器。

1、首先,打开php编辑器,新建php文件,例如:index.php。

2、在index.php中,输入代码:var_dump($_GET['name']);。

3、浏览器访问index.php?name[]=1&name[]=2,此时会打印出数组传递结果。

参考技术A 答:url传参不支持数组.
方法1: 把数组遍历出来,组成键值对传过去在接收.
方法2:把数组序列化,接收后在反转.
示例:$arr = array('1','2','3');
$str = base64_encode(serialize($arr));//此时数组已经转换为字符串
$a = unserialize(base64_decode($str));
print_r($a);追问

方法一 肯定不行 因为我有几千个数据要穿 组装成超链接的话 会溢出的 因为GET有字符限制

方法2:我试过了 但是总是还原不过来! 怎么能还原出来呀!   传的数据是中文!
我想 你既然能说出方法2 肯定有办法还原中文的 请一定要教教我!

追答

老兄,你都知道了url传参有长度限制,那你几千个数据应该是溢出了吧
建议搞post提交吧.
因为 base64_encode()这个函数可以把汉字转化的 base64_decode() 这个函数在还原.

.思路是 数组->序列化->base64转化->base64反转->反序列化->数组

用URL传值的时候有限制 但是这个限制应该是URL本身的限制 是从"http://"开始到整个URL结束的长度不能超过2048 而超过1024的时候安全性就无法保证了

追问

还是还原不过来 我的写法是这样的 您看下问题在哪里哦:
$str = base64_encode(serialize($arry2));
$URL="../insertcontract.php?Category=";
$URL=$URL.$str;
然后在另外一个页面接收:
$Category = unserialize(base64_decode($_GET["Category"]));
print_r($Category);
打印出来的空,,就是什么都没有接收到哦
控制层的PHP 页面里查询出数据 然后跳转到网页, 用表格显示出数据..请问这样 如何搞POST提交. 谢谢你啦

追答

亲,你先看下你这一行是不是错了 $str = base64_encode(serialize($arry2));
在转化的时候 你的 数组是 $arry2 还是 $array2

另外,查询出数据了,顺利成章的 就在接下来可以遍历 输出显示 .为什么要跳到另一个页面去显示

追问

第二个方法我终于弄好了,,不是代码写错的问题
而是base64_encode函数序列化中文后,再用超链接传递时,编码中的+号会变成“ ”(空格),,,,我接收值之后 把所有 空格 替换成 + 号,就可以顺利还原了!!
还有!传数组是为了 控制层和显示层 分开, mvc思想的!。 难道我把查询数据的代码 直接写在网页里?? 那样不是也很乱嘛!!
你们平常是怎么写的???????????????

追答

恭喜你啊
我们用的模板的 , 就MVC 思想, 页面显示很单间的啊

追问

我也用的mvc思想。。但是 控制层跳转到页面的时候,查询出来的很多条数据是怎么传递到页面的呀。。教教我呗!!谢谢啦

本回答被提问者采纳
参考技术B 和普通的参数一样传递即可,获取后直接是传之前一样的数组

打开应用程序并从电子邮件中的超链接传递参数

【中文标题】打开应用程序并从电子邮件中的超链接传递参数【英文标题】:Open application and pass arguments from hyper-link in email 【发布时间】:2014-03-05 14:45:13 【问题描述】:

这一切都是在内部通过受信任/完全访问权限完成的。

如何从电子邮件中的超链接打开我的应用程序并传递参数?

我知道我可以设置文件/链接类型关联(尽管我不确定如何以编程方式或在安装期间执行此操作)。这是最好的方法和/或我将如何设置它?

我可以在打开应用程序时传递参数(虽然这样做似乎有点笨拙)但是当应用程序已经打开时这将不起作用(仅限单个实例),这很可能总是案例。

我已经看到一些使用 JavaScript / ActiveX 完成的东西,但由于这些链接总是在 Outlook 的电子邮件中,我不认为这种方法会起作用。

所有机器都使用 Windows 7 和 .Net 4.1

【问题讨论】:

此应用程序是否安装在服务器中? ,这个应用程序是做什么的?? @AmarnathRShenoy 这是一个桌面 LOB 应用程序,我的想法是使用自动电子邮件警报中的链接来打开报告或链接到客户帐户。 我尝试了很多不同的组合,但似乎没有任何效果,我可以让它工作的唯一方法是使用已经设置的参数创建应用程序的快捷方式,然后超链接到这些快捷方式,而不是直接到应用程序。 【参考方案1】:

查看控制面板项“默认程序”,然后“设置关联”(“使文件类型或协议(例如 .mp3 或 http://)始终在特定程序中打开” )

这些是通过注册表项设置的(可以通过安装程序完成)。您将通过整个 url 作为您的第一个参数,因此您需要将其分开。

查看文档:

http://msdn.microsoft.com/en-us/library/ie/aa767914(v=vs.85).aspx

有注册表项的例子和一个简单的演示程序。

作为参考,注册表项的结构如下:

HKEY_CLASSES_ROOT 
   myapp
      (Default) = "URL:MyApp Protocol"
      URL Protocol = ""
      DefaultIcon
           (Default) = "myapp.exe,1"
      shell
           open
                command
                     (Default) = "C:\Program Files\WunderWurks\myapp.exe" "%1"

设置完成后,您可以向应用添加普通的 HTML 链接,例如 <a href="myapp:one_two_three">Click here</a>

您的应用程序将被称为 myapp.exe one_two_three

【讨论】:

谢谢你,至少现在我知道如何在安装时进行设置 - 我担心如果它已经打开,它会尝试启动另一个应用程序实例? 是的,它会的。在这种情况下,您需要在应用程序中处理它。见(***.com/questions/1207105/…)或(***.com/questions/19147/…);但是,您可能会以意想不到的方式破坏用户现有的工作流程。以使两个实例可行的方式构建程序可能会更好。 抱歉回复晚了,一直很差。我认为这是最好的方法,而不是让单个实例应用程序自己手动处理它。中断工作流程并不是一个真正的问题,因为该应用程序是基于选项卡的,因此不会丢失现有的工作,并且当用户单击链接时,我希望他们了解正在发生的事情。感谢您的帮助!。 我无法让它工作。我添加了注册表项,超链接能够打开应用程序,但它不接受参数。有没有其他人经历过这个?还是我缺少什么?【参考方案2】:

通过使用 vb 脚本(如果可以的话)- 你可以使用这个代码:

    <script type="text/vbscript" language="vbscript">

    sub testing

     Set wshShell = CreateObject ("WSCript.shell")
     wshshell.run "c:\path\programName.exe arg1 arg2 .... argn"
     set wshshell = nothing

    end sub

    </script>

【讨论】:

我不认为我可以将其用作电子邮件中的链接 - 我可以附加一个 vbs,但这很笨拙,而且我不愿意告诉人们可以打开 *.vbs附件(假设防病毒不会立即阻止它)。当应用程序已经运行时,这也不起作用,它会尝试打开另一个被禁止的实例。 关于那个 - 你是对的。这正是我写“如果你能做到”的原因。 在这种情况下您没有阅读问题:打开应用程序并从“电子邮件中的超级链接”传递参数

以上是关于php 超链接里的参数如何传递数组的主要内容,如果未能解决你的问题,请参考以下文章

用超链接传参时怎样一次传递多个参数

jsp怎么获取超链接作为参数来传递,怎么写?怎么获取?

JavaScript中怎样点击超链接后执行一个函数并且把超链接的文本作为函数的参数传递?

android中,如何屏蔽WebView里的超链接?

在超链接中传递参数/数据 - laravel Blade

SSH通过超链接传递中文参数出现乱码问题