[英]Why does ltrim remove one character too much?
<?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 '0'
到'\\'
, 'x'
, '3'
, '9'
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.