Re: quotemeta() question...
| From: | Richard Lynch | Date: | Mon, 14 Feb 2005 18:26:16 +0000 |
| Subject: | Re: quotemeta() question... | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-208673@lists.php.net to get a copy of this message | ||
Jason Barnett wrote:
> Richard Lynch wrote:
>> Steve Kaufman wrote:
>>
>>>Why does
>>> quotemeta("pat:1$WRW")
>>>return
>>> pat:1
>>>instead of
>>> pat:1\$WRW
>>>
>>>What am I misunderstanding about quotemeta function?
>>
>>
>> You usually would use quotemeta on data coming from the database, or the
>> user, or externally, or, errr, basically things you haven't typed in to
>> PHP, that you need to pass into Regular Expressions.
>>
>> In those cases, you've already got the $ (and other characters)
>> successfully embedded in the string, but you want to escape them for
>> whatever reason.
>>
>> A better example code would be:
>> $string =
>>
>> 'period.backslash\\plus+star*question?lbracket[rbracket]carat^lparen(rparen)dollar$';
>> echo "<PRE>", quotemeta($string), "</PRE>";
>>
>
> Interesting aside... with the test string above, I noticed that
> backslash\\ only resolved to two backslashes. I thought there would be
> 4. It seems that quotemeta will resolve \ and \\ to \\, \\\ and \\\\
> resolve to \\\\, etc.
No, no, no.
FORGET quotemeta for a moment.
*BEFORE* the string ever GETS to quotemeta, PHP takes the characters you
typed and builds a string.
For PHP, \\ inside of apostrophes turns into a single \.
You Type: Internal PHP string
'\\' \
'\'' '
'\\\\' \\
"\\" \
"\"" "
It's absolutely crucial that you understand that PHP itself alters the \\
to \ lonnnnnnng before quotemeta enters the picture.
If you use just '\' in what you type, PHP is kinda stuck with just
assuming you meant '\\' and it runs with \ as its internal representation.
This is documented behaviour, but I consider it Bad Style.
So using \ or \\\ or any odd number of \ inside of apostrophes/quotes to
get a backslash in the internal PHP string is just plain bogus, if you ask
me. [shrug]
At any rate, quotemeta is *NOT* the thing that converts \ and \\ into \\.
PHP converts \ and \\ into a single \
quotemeta converts that single \ into \\
--
Like Music?
http://l-i-e.com/artists.htm