使用 PHP,如何自动修复格式错误的 url,如下所示:
/db/?param1=sas23456sdfd¶m2=1368115104¶ma3=more/resource
or...
/db?param1=sas23456sdfd¶m2=1368115104¶ma3=more/resource
然后像这样重新排列成正确的顺序?:
/db/resource/?param1=sas23456sdfd¶m2=1368115104¶ma3=more
or...
/db/resource?param1=sas23456sdfd¶m2=1368115104¶ma3=more
在你问之前,格式错误的 url 的原因完全超出了我的控制,这是由一个客户端库引起的,该库坚持在原始查询字符串参数之后愚蠢地添加尾部斜杠和更多端点。幸运的是,我通过 PHP 反向代理脚本传送请求,所以可以想象我可以修复它。请注意:
- 查询字符串可能存在也可能不存在
- 有时可能会正确放置查询字符串
- 查询字符串参数名称和值将不同
- 查询字符串参数的数量可能会改变
- 查询字符串可能不总是跟在“/”之后(db/?param=val 或 db?param=val)
- 格式错误的 URL 将始终具有“?param(s)=value/”模式
关于如何用 PHP 解决这个问题有什么想法吗?
最佳答案
替换或修复客户端库可能更容易/更好,因为它没有做它应该做的事情(或者它是为不同的规范设计的)。
但是有一个正则表达式可以帮助你。
/(.*?)(\/)?(\?.*)(\/.*)/
这与示例中格式错误的字符串匹配,与结果字符串不匹配。在 Rubular 查看工作演示.
你可以像这样使用它(尽管我不确定这是否是处理它的最佳方式,我宁愿修复输出然后尝试处理损坏的输入):
$matches = array();
$is_malformed = preg_match('/(.*?)(\/)?(\?.*)(\/.*)/', $_SERVER['REQUEST_URI'], $matches);
if($is_malformed) {
$_SERVER['REQUEST_URI'] = $matches[1] . $matches[4] . $matches[2] . $matches[3];
}
关于php - 如何修复 PHP 中格式错误的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16493606/