# Double backslashes \ in strings

#### Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

•  Subject
• Author
• Posted on

I have a function textag($expression) whose$expression argument is a string that
can contain substrings like \alpha with one
backslash or like a&b\c&d with two backslashes.

If I write <?php textag('\alpha'); ?> with the
expression argument in single quotes, then that
works fine, and the single backslash isn't
interpreted or changed, which is what I want.
But if I write <?php textag('a&b\c&d'); ?>
then the double \ gets translated to a single \,
which isn't what I want.  Now, I can write
<?php textag('a&b\\c&d'); ?> to get a&b\c&d,
but that's quit inconvenient and kludgey.

Is there some way to fix this that's transparent
to the user calling textag()?  I can't really
do any kind of preg_replace, because that would
also change the originally correct \alpha to
incorrect \alpha.  Thanks for any suggestions,
--
John Forkosh  ( mailto:  j@f.com  where j=john and f=forkosh )

## Re: Double backslashes \ in strings

JohnF schreef:

Hi,

Nobody mentioned preg_replace. ;-)

http://www.php.net/manual/en/language.types.string.php

Regards,
Erwin Moller

--
============================
Erwin Moller
Now dropping all postings from googlegroups.
Why? http://improve-usenet.org /
============================

## Re: Double backslashes \ in strings

Erwin Moller < > wrote:

Thanks, Erwin.  I only mentioned preg_replace because
it had crossed my mind, but then I realized that would
be barking up the wrong tree.

The examples on
http://www.php.net/manual/en/language.types.string.php
include these two...
// Outputs: You deleted C:\*.*?
echo 'You deleted C:\*.*?';
and
// Outputs: You deleted C:\*.*?
echo 'You deleted C:\*.*?';
which indeed illustrate the problem,
i.e., \ outputs \, but \ also outputs \.

But I don't see any way to solve it that's
mentioned there, short of writing
// Outputs: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';
which is what I don't want to force users to do.
That is, if they want \, they should be able to type \
rather than \\.  Am I missing something on that
page that addresses this problem?  Thanks again,
--
John Forkosh  ( mailto:  j@f.com  where j=john and f=forkosh )

## Re: Double backslashes \ in strings

.oO(JohnF)

How will users use your function? Will they call it directly from within
their own scripts or does it receive data from an HTML form? It makes a
difference if you get a string value from some source (form, database,
whatever) or if you create it on your own. In the latter case you have
to take PHP's rules for string parsing and escaping into account, while
in the first case there shouldn't be any problem.

Micha

## Re: Double backslashes \ in strings

Thanks, Micha.  Specifically, the function will be used as
described at
http://www.forkosh.com/mimetex.html?valignment
That is, users will typically use it from within their own
scripts in exactly the form illustrated in the original post:
<?php textag('\begina&b\c&d\end); ?>
is a full example with both \'s and \'s.  The markup
syntax is LaTeX's, and it would be nice if users could
write it in its standard form.  Writing \\ for \
might be hard (and inconvenient) for them to remember all the time.
You seem to be saying that "in the first case there
shouldn't be any problem".  But isn't this your first case?
And I'm not seeing how to avoid the problem.  Thanks again,
--
John Forkosh  ( mailto:  j@f.com  where j=john and f=forkosh )

## Re: Double backslashes \ in strings

JohnF schreef:

Hi,

Well, the problem is still a little vague to me.

And yes, escaping can be very confusing. ;-)
Try feeding \ to complex regular expression from PHP if you want a heavy

Correct.
Reason is that with single quote the \ is treated in the context you use
it in.
[quote]
Single quoted

The simplest way to specify a string is to enclose it in single quotes
(the character ').

To specify a literal single quote, escape it with a backslash (\). To
specify a literal backslash before a single quote, or at the end of the
string, double it (\). Note that attempting to escape any other
character will print the backslash too.
[/quote]

Try running these, and see if it makes sense to you:
SQ = single quotes, and BS is .... backslash. :P

echo 'SQ, BS will not escape since the next char is a b: \bla';
echo '<br>';
echo 'SQ, BS will escape since the next char is a quote: \'bla';
echo '<br>';
echo 'SQ, BS will escape since the next char is a BS : \bla';
echo '<br>';
echo 'SQ, Now ending a string with SQ: \'bla\'';
echo '<br>';
echo 'SQ, Now ending a string with SQ with BS in it: \'\bla\\'';

You might have a look at the function addslashes()

Tip: Do NOT use addslashes to make a string safe for use in SQL, it is
not enough.

Hope this helps.

And, test a lot, also check your php.ini for possible confusing settings
like  magic_quotes_gpc.

Regards,
Erwin Moller

--
============================
Erwin Moller
Now dropping all postings from googlegroups.
Why? http://improve-usenet.org /
============================

## Re: Double backslashes \ in strings

Erwin Moller < > wrote:

An analogous problem would be: suppose you want to
echo two backslashes; you'd have to use the statement
echo '\\';
with four backslashes instead.  Now, I can see why
you have to type echo "\\"; since escaped chars are
translated inside "double quotes".  But they're not
translated inside 'single quotes', so why can't you
type echo '\'; to get \?
Maybe it's still vague why I seem so lazy that
I don't want to type a few extra backslashes.  That's
because the real problem is that users will be typing
these strings, not to echo them, but as arguments to
a function like  <?php textag('a\b'); ?>  where
the letter a is followed by two \ backslashes
(not one \) and then followed by the letter b.
Users will not expect to need to type four
backslashes when they want two, and that's liable
to cause problems I'd rather avoid.
--
John Forkosh  ( mailto:  j@f.com  where j=john and f=forkosh )

## Re: Double backslashes \ in strings

JohnF schreef:

Did you understand it all?

All your confusion and problems are unneeded, nor is it needed for the
users to type 4 slashes if they want 2.

Regards,
Erwin Moller

--
============================
Erwin Moller
Now dropping all postings from googlegroups.
Why? http://improve-usenet.org /
============================