Hi Tjerk: yes, substr_compare can do it, and it also supports negative length argument too.
but I am proposal to improve strn(case)cmp, so they are not conflict . :) thanks 2011/8/15 Tjerk Anne Meesters <datib...@php.net>: > Hi, > > Doesn't substr_compare() accomplish the same thing since 5.1.0? > > The only thing I couldn't figure out is how to make it case > insensitive without specifying an explicit value to $length > > > Best, > Tjerk > > On Mon, Aug 15, 2011 at 11:18 AM, Laruence <larue...@php.net> wrote: >> Hi: >> compare to use substr, strncmp supporting negative lenght can >> save a temp variable. >> >> thanks >> >> 2011/8/15 Rasmus Lerdorf <ras...@php.net>: >>> On 08/14/2011 02:37 PM, Rasmus Lerdorf wrote: >>>> On 08/14/2011 02:03 PM, Stas Malyshev wrote: >>>>> Hi! >>>>> >>>>> On 8/14/11 11:40 AM, Rasmus Lerdorf wrote: >>>>>> My main issue with changing strncmp/strncasecmp is that these are >>>>>> currently exact mappings of the underlying libc functions. For people >>>>> >>>>> And why should anybody care? 99% of people using PHP never used a libc >>>>> function and can hardly tell libc from gcc. If we can extend this >>>>> function with useful functionality, nobody cares about what libc does. >>>>> >>>>>> For example, I could imagine people writing code along these lines: >>>>>> >>>>>> $len = strlen($user_data) - strlen($suffix); >>>>>> if(!strncmp($user_data, $string, $len)) { >>>>>> // do something >>>>>> } >>>>> >>>>> Warning doesn't fix the bug - and unless you're in 0.0001% of the >>>>> population that actually reads the logs daily and checks every message >>>>> there it would be little to help you. We should have more useful >>>>> functions, not more warnings. Warning won't make this code to work. >>>> >>>> I agree, however this change would potentially change the return value >>>> of the function. Before it would warn and not match. Even if you never >>>> saw the warning, at least length -1 would not give you a match. Now if >>>> the user data happens to end with the right character we now have a >>>> string match which is not at all what the code was written to do. >>> >>> Put more succinctly. Subtle BC breaks like this worry me. Any strncmp() >>> call with a computed length where that length may in some cases go >>> negative will now potentially return a match where it wouldn't before. >>> This would be very hard to track down. And the reason for introducing >>> this subtle BC break is so that you can rewrite: >>> >>> if (substr("prefix_num", -3) == "num") { >>> echo "they have same suffix\n"; >>> } >>> >>> >>> into: >>> >>> if (strncmp("prefix_num", "num", -3) === 0) { >>> echo "they have same suffix\n"; >>> } >>> >>> That doesn't seem like a big win to me. >>> >>> -Rasmus >>> >>> -- >>> PHP Internals - PHP Runtime Development Mailing List >>> To unsubscribe, visit: http://www.php.net/unsub.php >>> >>> >> >> >> >> -- >> Laruence Xinchen Hui >> http://www.laruence.com/ >> >> -- >> PHP Internals - PHP Runtime Development Mailing List >> To unsubscribe, visit: http://www.php.net/unsub.php >> >> > > > > -- > -- > Tjerk > -- Laruence Xinchen Hui http://www.laruence.com/ -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php