From:             lgandras at hotmail dot com
Operating system: WINDOWS AND LINUX
PHP version:      5.2.6
PHP Bug Type:     Scripting Engine problem
Bug description:  Backslash char is not listed on a string correctly

Description:
------------
When a string contains backslashs, they are shown on a way, but kept
differntly on the string. This is annoying when a string needs to be parsed
to know if a quote is being escaped.

Reproduce code:
---------------
$stringA = "\\'";    # returns \'
$stringB = "\\\'";   # returns \\'
$stringC = "\\\\'";  # returns \\'
$stringD = "\\\\\'"; # returns \\\'

# etc.. I don't have problem with it.
# But! this is the way it is shown!
# internally the string is kept how the programmer wrote it
# how are you supposted to known with php routines
# that $stringB escapes the quote and $stringC does not!
# using stripslashes is not an option,
# because it could delete some backslashes you want to keep.
# 
# 
# I've seen other bugs, where it is told
# that normal functioning of stripslashes
# is to delete all the "first" slashes,
# but then is not possible to parse a string
# even with regular expressions to know what
# a parser like mysql would understand of my
# string.
# 
# In other words, backslashes are still there,
# but you can't know it!

$stringB == $stringC; # devolves true, in the end is right, but not now.
$stringB === $stringC; # also true (in the end), but not for mysql


substr($stringB, 0, 1) === substr($stringC, 0, 1);
substr($stringB, 1, 1) === substr($stringC, 1, 1);
substr($stringB, 2, 1) === substr($stringC, 2, 1);

# again, on the last 3 examples it returns true,
# but it doesn't let me know if the quote is being escaped or not.
# If questions are done, i need to parse a mysql string!
# My other solution is that str_replace and/or regular
# expression functions handle this issues in an adecuate way

echo "B:";
echo str_replace('\\', '', $stringB);
echo "<br />C:";
echo str_replace('\\', '', $stringC);

Expected result:
----------------
B:\'
C:'
# note that this is in concordance with what the manual says

Actual result:
--------------
B:'
C:'

-- 
Edit bug report at http://bugs.php.net/?id=45462&edit=1
-- 
Try a CVS snapshot (PHP 5.2): 
http://bugs.php.net/fix.php?id=45462&r=trysnapshot52
Try a CVS snapshot (PHP 5.3): 
http://bugs.php.net/fix.php?id=45462&r=trysnapshot53
Try a CVS snapshot (PHP 6.0): 
http://bugs.php.net/fix.php?id=45462&r=trysnapshot60
Fixed in CVS:                 http://bugs.php.net/fix.php?id=45462&r=fixedcvs
Fixed in release:             
http://bugs.php.net/fix.php?id=45462&r=alreadyfixed
Need backtrace:               http://bugs.php.net/fix.php?id=45462&r=needtrace
Need Reproduce Script:        http://bugs.php.net/fix.php?id=45462&r=needscript
Try newer version:            http://bugs.php.net/fix.php?id=45462&r=oldversion
Not developer issue:          http://bugs.php.net/fix.php?id=45462&r=support
Expected behavior:            http://bugs.php.net/fix.php?id=45462&r=notwrong
Not enough info:              
http://bugs.php.net/fix.php?id=45462&r=notenoughinfo
Submitted twice:              
http://bugs.php.net/fix.php?id=45462&r=submittedtwice
register_globals:             http://bugs.php.net/fix.php?id=45462&r=globals
PHP 4 support discontinued:   http://bugs.php.net/fix.php?id=45462&r=php4
Daylight Savings:             http://bugs.php.net/fix.php?id=45462&r=dst
IIS Stability:                http://bugs.php.net/fix.php?id=45462&r=isapi
Install GNU Sed:              http://bugs.php.net/fix.php?id=45462&r=gnused
Floating point limitations:   http://bugs.php.net/fix.php?id=45462&r=float
No Zend Extensions:           http://bugs.php.net/fix.php?id=45462&r=nozend
MySQL Configuration Error:    http://bugs.php.net/fix.php?id=45462&r=mysqlcfg

Reply via email to