<?php
echo ltrim('12Hello World', ''x30..'x39');
echo "<br />";
echo ltrim('12Hello World', '0123456789');
给出输出:
ello World
Hello World
为什么?我知道它是一个字符数组,每个字符都被剥离,但如果是这种情况,为什么在第一种情况下删除H
?
''x30..'x39'
是以下字符掩码:
-
'
-
x
-
3
-
0..'
,即从0
到'
,其中包括H
-
9
您需要使用双引号,否则'xXX
转义序列不会被解释为字节:
"'x30..'x39"
这是从字节x30
到x39
的任何字符掩码,在ASCII和兼容编码中为0 - 9。
转义序列在单引号内不被解释。所以你的第二个论点是按字面理解的。它说要裁剪以下字符:
-
'
-
x
-
3
-
0
至'
-
x
-
3
-
9
如果你看一下ASCII图表,你会看到0
到'
的范围包括所有的大写字母。
更改为双引号字符串以解释十六进制转义序列:
echo ltrim("12Hello World", "'x30..'x39")
生产:
Hello World
当您打算使用十六进制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'
。