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

Ms0*_*s01 5 php trim

<?php
echo ltrim('12Hello World', '\x30..\x39');
echo "<br />";
echo ltrim('12Hello World', '0123456789');
Run Code Online (Sandbox Code Playgroud)

给出输出:

ello World
Hello World
Run Code Online (Sandbox Code Playgroud)

为什么?我知道它是一个字符数组,每个字符都被剥离但如果是这样的话,为什么H在第一种情况下删除?

dec*_*eze 8

'\x30..\x39' 是以下字符掩码:

  • \
  • x
  • 3
  • 0..\的,即从任何0通过\,它包括H
  • 9

您需要使用双引号,否则\xXX转义序列不会被解释为字节:

"\x30..\x39"
Run Code Online (Sandbox Code Playgroud)

这是从字节x30到字节的任何字符掩码,x39在ASCII和兼容编码中为0-9.