【问题标题】:php base64_decode strange outputphp base64_decode 奇怪的输出
【发布时间】:2013-10-15 20:45:14
【问题描述】:

base64_decode 函数的输出非常奇怪。输出是一个长度为 18 的字符串,但是当我 var_dump 字符串时 .. 长度是 32! 这会影响我为这个字符串申请的 preg_match 函数。 知道为什么吗?

$input_line = base64_decode('OQA3ADgAMAA5ADgAMgA3ADQAMwA2ADAANwA5ADAAMAAwADAA');
var_dump($input_line);

输出

string(36) "978098274360790000"

问候

【问题讨论】:

  • 那里可能有不可打印的字符,例如努尔斯。如果您遍历 $input_line 的每个字符并打印出每个字符的 ascii 值,您会发现它们隐藏在哪里......可能在字符串的末尾。
  • 如果您强制使用数据类型,那么 vardump 是否仍会产生相同的结果? var_dump($input_line(int));

标签: php base64


【解决方案1】:

字符串有很多不可打印的字符(NUL 字节)。您可以通过xxd 之类的程序通过管道传递值来查看这一点:

0000000:3900 3700 3800 3000 3900 3800 3200 3700 9.7.8.0.9.8.2.7。 0000010:3400 3300 3600 3000 3700 3900 3000 3000 4.3.6.0.7.9.0.0。 0000020:3000 3000 0.0。

【讨论】:

    【解决方案2】:

    谢谢大家,尤其是@tim-cooper 字符串中有空字节,我在这里找到了解决方案: How can I remove the NULL character from string

    基本上就是这样:

    str_replace("\0", "", $input_line);
    

    【讨论】:

      猜你喜欢
      • 2012-01-12
      • 2023-03-10
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多