【问题标题】:PHP ltrim behavior with character list带有字符列表的 PHP ltrim 行为
【发布时间】:2012-02-21 11:34:45
【问题描述】:

我试图使用 php ltrim 函数从字符串中剥离一些开始部分。它工作正常,直到它在冒号 : 后得到一个 i 字符。如果它在冒号后找到 i 它只是忽略 i 字符。我知道它可以用 substr 或任何其他方式来完成,但我想知道它为什么会发生在 trim 上。例如。

ltrim('mailto:bob@example.com','mailto:');

上述函数将返回 bob@example.com

但是如果我把 i 放在冒号之后..例如

ltrim('mailto:info@example.com','mailto:');

这个会返回 nfo@example.com

谁能解释发生了什么?

【问题讨论】:

    标签: php trim


    【解决方案1】:

    ltrim 的第二个参数是要从字符串左侧删除的字符列表。

    如果你这样做了

    <?php
        ltrim('lllliiiiaaaaaatttttt', 'mailto:');
    ?>
    

    你会得到一个空字符串作为返回值。

    试试这个:

    <?php
        $email = 'mailto:bob@example.com';
        $fixedEmail = substr($email, 0, 7) == 'mailto:' ? substr($email, 7) : $email;
    ?>
    

    【讨论】:

    • 很好的答案,通常我使用函数 preg_replace 代替。
    【解决方案2】:

    ltrim() 的工作方式不同,它从左侧修剪所有给定字符,直到找到不匹配的字符。因此,当您在电子邮件地址中的冒号后面加上“i”时,第一个不匹配的字符是“n”,因此它会修剪它之前的所有内容。

    如果您的意图是删除“mailto:”,您可以简单地尝试:

    str_replace('mailto:', '', 'mailto:info@example.com');
    

    【讨论】:

    • 这并不总是一个好主意..例如...如果我想从Dr manDrake Dracula中删除Dr,如果我这样做,它将返回manake aculastr_replace('Dr', '', 'Dr manDrake Dracula');
    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多