PHP ltrim поведение со списком символов - PullRequest
3 голосов
/ 29 января 2012

Я пытался добиться удаления какой-либо начальной части из строки, используя функцию php ltrim. Работает нормально, пока не получит символ i после двоеточия: если он находит i после двоеточия, он просто игнорирует символ i. Я знаю, что это можно сделать с помощью substr или любым другим способом, но я хочу знать, почему это происходит с отделкой. Например.

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

вышеупомянутая функция вернет bob@example.com

но если я поставлю i после двоеточия .. например

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

этот вернет nfo@example.com

Кто-нибудь может объяснить, что происходит?

Ответы [ 2 ]

7 голосов
/ 29 января 2012

Второй аргумент для ltrim - это список символов, которые нужно удалить с левой стороны строки.

Если вы сделали

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

В качестве возврата вы получите пустую строкузначение.

Попробуйте вместо этого:

<?php
    $email = 'mailto:bob@example.com';
    $fixedEmail = substr($email, 0, 7) == 'mailto:' ? substr($email, 7) : $email;
?>
0 голосов
/ 29 января 2012

ltrim () работает иначе, так как обрезает все заданные символы слева до тех пор, пока не будет найден несовпадающий символ.Поэтому, когда вы ставите «i» после двоеточия в адресе электронной почты, первым непарным символом является «n», поэтому он обрезает все перед ним.

Если вы намереваетесь удалить «mailto:», вы можетепросто попробуйте:

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