<?php
echo ltrim('12Hello World', '\x30..\x39');
echo "<br />";
echo ltrim('12Hello World', '0123456789');
给出输出:
ello World
Hello World
为什么呢?我知道它是一个字符数组,每个字符都被删除但是如果是这样的话,为什么在第一种情况下删除了H
?
答案 0 :(得分:8)
'\x30..\x39'
是以下字符掩码:
\
x
3
0..\
,即0
到\
之内的任何内容,其中包括H
9
您需要使用双引号,否则\xXX
转义序列不会被解释为字节:
"\x30..\x39"
这是从字节x30
到x39
的任何字符掩码,在ASCII和兼容编码中为0-9。
答案 1 :(得分:3)
转义序列不会在单引号内解释。所以你的第二个参数是按字面解释的。它说修剪以下字符:
\
x
3
0
至\
x
3
9
如果您查看ASCII chart,则会发现0
到\
的范围包含所有大写字母。
更改为双引号字符串以解释十六进制转义序列:
echo ltrim("12Hello World", "\x30..\x39")
产生
Hello World
答案 2 :(得分:0)
当你的意思是使用十六进制的ascii字符时,你必须使用双引号。
// range 0 to 9
echo ltrim('12Hello World', "\x30..\x39"); // output will be Hello World
如果您使用单引号,则character_mask '\x30..\x39'
将被解释为
字符'\'
,'x'
,'3'
,范围从char '0'
到'\'
,'x'
,'3'
,'9'
。