Bug #60992 [Com]: Trim / rtrim bug when we need to delete extension
| From: | ab@php.net | Date: | Sun, 19 Feb 2012 19:27:39 +0000 |
| Subject: | Bug #60992 [Com]: Trim / rtrim bug when we need to delete extension | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-167630@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=60992&edit=1
ID: 60992
Comment by: ab@php.net
Reported by: elie29 at gmail dot com
Summary: Trim / rtrim bug when we need to delete extension
Status: Open
Type: Bug
Package: Strings related
Operating System: windows
PHP Version: 5.3.10
Block user comment: N
Private report: N
New Comment:
consider this to achieve your goal:
basename('hello.js', '.js')
Previous Comments:
------------------------------------------------------------------------
[2012-02-06 14:03:28] anon at anon dot anon
This is the correct logic for the trim functions. As stated in the documentation, the second
parameter is a list of characters, not a solid string to test for verbatim. Hence
rtrim('users.php', 'ph.')) is also 'users'. Try something
like this instead:
function rtrim_str($str, $fragment) {
if (substr($str, -strlen($fragment)) === $fragment) $str = substr($str, 0, -strlen($fragment));
return $str;
}
------------------------------------------------------------------------
[2012-02-06 13:46:14] elie29 at gmail dot com
Description:
------------
If we need to delete from a file name its extension using trim or rtrim function,
the return value is uncorrect when your file name is ended with an 's' characters.
Exemple :
rtrim('users.js', '.js'); => will return user instead of users
Test script:
---------------
var_dump(rtrim('users.js', 'js')); // users. OK
var_dump(rtrim('users.', '.')); //users OK
var_dump(rtrim('users.js', '.js')); // user instead of users KO
var_dump(trim('users.php', '.php')); // user instead of users KO
var_dump(rtrim('correct.js', '.js')); //correct OK
var_dump(trim('ssss.js', '.js')); // empty string instead of ssss KO
Expected result:
----------------
var_dump(rtrim('users.js', 'js')); // users.
var_dump(rtrim('users.', '.')); //users
var_dump(rtrim('users.js', '.js')); // users
var_dump(trim('users.php', '.php')); // users
var_dump(rtrim('correct.js', '.js')); //correct
var_dump(trim('ssss.js', '.js')); // sss
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=60992&edit=1