gpt4 book ai didi

php - 包含两个问号分隔符 '?' 的 php 查询字符串是否有问题? (file.php?parm1=val1&parm2=val2?parm3=val3&...)

转载 作者:可可西里 更新时间:2023-11-01 13:23:19 27 4
gpt4 key购买 nike

所以这里有一些关于这个问题的更多细节......

我有两个来自两个不同供应商的系统,都是专有的。我们将它们称为系统 A 和系统 B。这两个系统都作为独立的实体运行,但系统 B 提供了系统 A 所缺少的一些额外的和非常具体的功能。系统 B 背后的供应商在相当基础的层面上与系统 A 集成(系统B 与同一市场中类似于系统 A 的其他供应商系统集成)。系统 B 是一个 php 驱动的应用程序,而系统 A 不是。集成方法是这样的:

系统 B 导出包含各种参数/值对的结构化控制文件(也称为文本文件)。系统A旨在将控制文件导入系统A。系统A获取控制文件中的数据,将其与自己的一些数据结合起来,并构造一个URI。此 URL 在系统 A 内的相应页面上显示为用户可单击的链接。正是此 URI 包含双“?”在查询字符串中。这个相同的 URI 包含我只能描述为回发 URI(系统 A 上的特定 URI,用于从系统 B 接收数据,形成双向通信)。

因此点击链接的用户操作执行以下操作:

第 1 步:系统 A 在“file.php”的查询字符串中将一系列参数和值传递给系统 B。

第 2 步:系统 B 从系统 A 接收数据,执行一些验证和其他操作,将一些信息写入数据库,并在此过程中生成一个独立于系统 A 的新子浏览器窗口。用户然后开始他们的操作在系统 B 中工作。

第 3 步:当用户在系统 B 中完成任务并提交他们的工作时,系统 B 通过回发 URI 将一系列参数和值传递回系统 A。系统 A 执行一些验证,将结果写入数据库,然后向系统 B 发出命令以结束 session (当我说 session 时,这不是您认为的真正 session ,因为没有状态信息)和系统B 关闭子窗口。

大多数时候,这个过程是有效的。两个供应商都支持这个过程。然而,有时这个过程在第 1 步或第 3 步中失败。失败表现为系统 B 的硬错误(如在第 1 步中),因为它没有在查询字符串中接收到它需要和期望的信息,或者系统 B 将其数据发送回系统 A 的错误(如步骤 3 中所示),但系统 A 无法检索数据。后一个错误不会呈现给用户,也不会生成任何错误日志数据。它根本不存在。我们只有在用户在系统 A 中查找他们的工作但那里什么也没有时才知道。

因为它已经启动,系统 A 正在对查询字符串数据执行 URL 编码/解码。

由于错误是间歇性的,而且我无法在我的 QA 环境中重现,所以我只能靠猜测。

最佳答案

因为我自己很好奇,所以用 PHP 做了一些快速测试。以下是 URL 列表以及每个 URL 中显示在 $_GET 中的内容:

http://192.168.1.200/test.php?var1=test&var2=anotherTest
array(2) { ["var1"]=> string(4) "test" ["var2"]=> string(11) "anotherTest" }

http://192.168.1.200/test.php?var1=test?var2=anotherTest
array(1) { ["var1"]=> string(21) "test?var2=anotherTest" }

http://192.168.1.200/test.php?var1=test&?var2=anotherTest
array(2) { ["var1"]=> string(4) "test" ["?var2"]=> string(11) "anotherTest" }

http://192.168.1.200/test.php?var1=test?&var2=anotherTest
array(2) { ["var1"]=> string(5) "test?" ["var2"]=> string(11) "anotherTest" }

http://192.168.1.200/test.php??var1=test&var2=anotherTest
array(2) { ["?var1"]=> string(4) "test" ["var2"]=> string(11) "anotherTest" }

基本上,第二个“?”始终被视为数据的一部分。可能是在乱用变量名称或导致其他问题,不知道。

关于php - 包含两个问号分隔符 '?' 的 php 查询字符串是否有问题? (file.php?parm1=val1&parm2=val2?parm3=val3&...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8083591/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com