【问题标题】:php parse string without decodingphp解析字符串而不解码
【发布时间】:2018-12-10 01:05:58
【问题描述】:

我的$_SERVER['QUERY_STRING'] 返回这个:

route=common/home/test/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g%2Fdj1iZWsxeTJ1aVFHQQ%3D%3D/456&param2=test

我们可以看到,get 请求传递了 base64 编码的字符串。 我想解析路由参数而不解码它的值。

我需要这个:

common/home/test/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g%2Fdj1iZWsxeTJ1aVFHQQ%3D%3D/456

不是这个:

common/home/test/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1iZWsxeTJ1aVFHQQ==/456

我尝试使用 parse_str 函数解析路由参数。但它解码了路线的价值。

【问题讨论】:

  • 那么你是说你想要将路由的内容传递给一个编码完整的新变量吗?
  • 要么重新编码,要么使用正则表达式来split it up

标签: php parsing get base64 rawurl


【解决方案1】:
$route_var = $_REQUEST["route"];
$pieces = explode("/", $route_var);
$sliced = array_slice($pieces, 3)
$based = implode("/", $sliced);
$pathslice = array_slice($pieces, 0,3);
$path = implode("/", $pathslice);
$b64part = urlencode($based);
$output = $path."/".$b64part;

如果您回显输出,这应该会为您提供正确的编码 base64。

【讨论】:

  • 我需要动态方式。您的代码也返回:aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g 但我需要aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g%2Fdj1iZWsxeTJ1aVFHQQ%3D%3D
【解决方案2】:

您基本上可以复制parse_str,但无需应用 urldecode:

$x = $_SERVER['QUERY_STRING'];
$y = explode('&', $x);

$qs = [];

foreach($y AS $z) {
    list($key, $val) = explode('=', $z);
    $qs[$key] = $val;
}

应该给你什么

array(2) {
  ["route"]=> string "common/home/test/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g%2Fdj1iZWsxeTJ1aVFHQQ%3D%3D/456"
  ["param2"]=> string "test"
}

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 2017-01-27
    • 1970-01-01
    • 2020-05-11
    • 2013-08-18
    • 1970-01-01
    • 2019-02-07
    • 2011-07-03
    • 1970-01-01
    相关资源
    最近更新 更多