繁体   English   中英

为什么ltrim会删除一个字符太多?

[英]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"

这是从字节x30x39任何字符掩码,在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM