472,342 Members | 1,298 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,342 software developers and data experts.

Double backslashes \\ in strings

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 )
Sep 24 '08 #1
7 12547

JohnF schreef:
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,
Hi,

Nobody mentioned preg_replace. ;-)

Read up here:
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/
============================
Sep 24 '08 #2
Erwin Moller < wrote:
JohnF schreef:
>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,

Hi,
Nobody mentioned preg_replace. ;-)
Read up here:
http://www.php.net/manual/en/language.types.string.php
Regards,
Erwin Moller
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 )
Sep 24 '08 #3
..oO(JohnF)
>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.
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
Sep 24 '08 #4
Michael Fesser <ne*****@gmx.dewrote:
.oO(JohnF)
>>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.

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.
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('\begin{matrix}a&b\\c&d\end{matrix}); ?>
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 )
Sep 24 '08 #5

JohnF schreef:
Erwin Moller < wrote:
>JohnF schreef:
>>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,
Hi,
Nobody mentioned preg_replace. ;-)
Read up here:
http://www.php.net/manual/en/language.types.string.php
Regards,
Erwin Moller

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.

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
headache. ;-)
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 \.
Correct.
Reason is that with single quote the \ is treated in the context you use
it in.
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.
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\\\'';
>
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,
You might have a look at the function addslashes()
http://nl3.php.net/manual/en/function.addslashes.php

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/
============================
Sep 25 '08 #6
Erwin Moller < wrote:
JohnF schreef:
>Erwin Moller < wrote:
>>JohnF schreef:
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,

Nobody mentioned preg_replace. ;-)
Read up here:
http://www.php.net/manual/en/language.types.string.php

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.

Well, the problem is still a little vague to me.
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 )
Sep 26 '08 #7

JohnF schreef:
Erwin Moller < wrote:
>JohnF schreef:
>>Erwin Moller < wrote:
JohnF schreef:
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,
Nobody mentioned preg_replace. ;-)
Read up here:
http://www.php.net/manual/en/language.types.string.php
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.
Well, the problem is still a little vague to me.
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.
Did you read my response?
Did you follow and read the links I sent you?
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.

Please reread my last posting and make sure you understand everything.

Regards,
Erwin Moller

--
============================
Erwin Moller
Now dropping all postings from googlegroups.
Why? http://improve-usenet.org/
============================
Oct 2 '08 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: sinister | last post by:
The examples in the online manual all seem to use double quotes, e.g. at http://us3.php.net/preg_replace Why? (The behavior is different with...
7
by: Margaret MacDonald | last post by:
I've been going mad trying to figure out how to do this--it should be easy! Allow the user to enter '\_sometext\_', i.e., literal backslash,...
6
by: Mikheil | last post by:
Hello! I need to translate file destination name with one backslashes "c:\program files\directory\file.txt" to string containing double...
6
by: supercomputer | last post by:
I am using this function to parse data I have stored in an array. This is what the array looks like: , , , , , , , , , , , , , , , , , , , ,...
2
by: wylbur37 | last post by:
When using a form with an input textbox such as the following ... <input type="text" name="field1" size=30> I discovered that when a backslash...
3
by: Stef Mientki | last post by:
It looks like sometimes a single backslash is replaced by a double backslash, but sometimes it's not ??? See the error message below, the first...
3
by: =?Utf-8?B?cmFuZHkxMjAw?= | last post by:
OpenFileDialog gives me the following, which I place in tbDevPath.Text: x:\\myVob\\mySolution\\mySolution.sln I really need this path to be...
23
by: dkirkdrei | last post by:
I am having a bit of trouble trying to double up on slashes in a file path. What I am trying to do is very similar to the code below: <? $var =...
6
by: Joseph Stateson | last post by:
I just started calling a php module from html. I added "php rocket" from microsoft to FP2003 but dont think that is the cause. The problem is...
0
by: teenabhardwaj | last post by:
How would one discover a valid source for learning news, comfort, and help for engineering designs? Covering through piles of books takes a lot of...
0
by: Kemmylinns12 | last post by:
Blockchain technology has emerged as a transformative force in the business world, offering unprecedented opportunities for innovation and...
0
by: Naresh1 | last post by:
What is WebLogic Admin Training? WebLogic Admin Training is a specialized program designed to equip individuals with the skills and knowledge...
0
by: Matthew3360 | last post by:
Hi there. I have been struggling to find out how to use a variable as my location in my header redirect function. Here is my code. ...
2
by: Matthew3360 | last post by:
Hi, I have a python app that i want to be able to get variables from a php page on my webserver. My python app is on my computer. How would I make it...
0
by: AndyPSV | last post by:
HOW CAN I CREATE AN AI with an .executable file that would suck all files in the folder and on my computerHOW CAN I CREATE AN AI with an .executable...
0
by: Arjunsri | last post by:
I have a Redshift database that I need to use as an import data source. I have configured the DSN connection using the server, port, database, and...
0
hi
by: WisdomUfot | last post by:
It's an interesting question you've got about how Gmail hides the HTTP referrer when a link in an email is clicked. While I don't have the specific...
0
by: Matthew3360 | last post by:
Hi, I have been trying to connect to a local host using php curl. But I am finding it hard to do this. I am doing the curl get request from my web...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.