【问题标题】:PHP: is there a way to see "invisible" characters like \nPHP:有没有办法看到像 \n 这样的“不可见”字符
【发布时间】:2012-02-19 01:33:56
【问题描述】:

有没有办法以类似 print_r() 的方式查看不可见字符,如空格、换行符和其他非打印字符?

原因是我的数组中有某种我看不到的字符并破坏了一些东西。

Object Object
(
  [name] => name
  [numbers] => Array
      (
          [0] => 123

          [1] => 456
          [2] => 789
      )
   [action] => nothing
)

看到 [0] 和 [1] 之间奇怪的空格了吗?当打印出 [0] 时,也会打印一个换行符。但是我没有在哪里为 [0] 分配换行符,所以我很困惑。

php 中是否有类似show_invisible(Object->numbers[0]) 的内置函数,它会显示123\n 或类似的?

【问题讨论】:

  • 在十六进制编辑器中查看输出。许多优秀的文本编辑器都有十六进制模式。我认为将其转换为 PHP 中的十六进制只是为了调试会很麻烦。我不知道有什么功能可以以人类可读的方式显示非打印文件

标签: php


【解决方案1】:

要查看所有不可见字符,不仅是\r\n 等...很高兴看到json_encodeed 版本,一切都清楚了:

$str = "...";
echo json_encode($str);

【讨论】:

  • 这对我来说是最简单/最简单的解决方案。找到了我正在寻找的\r
  • 但这也会将"编码为\"\编码为\\,以及像ś这样的重音字母编码为\u015b
【解决方案2】:

您可能可以列出所有控制字符,但试试这个快速修复?

PHP - print string with control characters

这是一种简单的str_replace("\n",'\n',$string) 修复方法,但您可以调整数组上的函数回调的解决方案以转换这些字符。

【讨论】:

    【解决方案3】:

    您可以只运行您的 php 脚本,然后将其直接通过管道传输到 hexdump -C

    【讨论】:

      【解决方案4】:

      你可以使用addcslashes函数:

      string addcslashes (string $str, string $charlist)

      这将返回一个在字符前带有反斜杠的字符串。一个例子是:

      <?php
      echo addcslashes('foo[ ]', 'A..z');
      // output:  \f\o\o\[ \]
      // All upper and lower-case letters will be escaped
      // ... but so will the [\]^_`
      ?>
      

      【讨论】:

        【解决方案5】:

        要精确复制输入字符串,不带周围的" 且不进行序列化,请将此包装器用于json_encode()

        substr(json_encode((string)$string), 1, -1)
        

        它执行字符串转换并删除 JSON 标准的 "

        【讨论】:

          猜你喜欢
          • 2015-11-25
          • 2016-03-08
          • 1970-01-01
          • 1970-01-01
          • 2020-04-09
          • 2020-02-14
          • 2012-05-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多