PHP查看字符串中的特殊字符

3

我正在尝试弄清楚 PHP 如何处理换行符和特殊字符。我有一个字符串,当我执行 var_dump($string) 时,输出结果如下:

string 'ls -al

    free -m' (length=16)

我该如何查看此处隐藏的特殊字符?例如,需要知道它们是\n还是&#10或其他什么。

谢谢。

3个回答

6

查看不可打印字符的最佳方法是通过打印bin2hex($string)。这将为您提供字符串的实际二进制转储。将其与您喜欢的ASCII表或其他特定于您的字符串编码的表进行比较。


好的,所以十六进制的输出是6c73202d616c0d0a66726565202d6d,使用从十六进制到ASCII的转换器输出ls -al??free -m,请注意那些??。它们应该是\n。有任何想法发生了什么? - Justin
1
十六进制转储看起来非常正常。中间的 0d0a 只是一个 CRLF Windows 换行符。 - deceze

2
如果您正在使用PHP Cli的Unix环境中运行命令,则可以尝试使用cat
php file.php | cat -e

否则,您可以将 var_dump 处理为字符串,并手动显示特殊字符:
$string = "test
test";

$dump = var_export($string, true);
for ($i = 0; ($i < strlen($dump)); $i++) {
    if ((ord($dump[$i]) < 32) || (ord($dump[$i]) > 127)) {
        echo '(' . ord($dump[$i]) . ')';
    } else {
        echo $dump[$i];
    }
}

// will output 'test(13)(10)test' on Windows, 'test(10)test' on Unix systems.

0

你可以使用:

preg_match("/(&#[0-9]+;)|[\t\r\n]/", $string, $matches);
print_r($matches);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接