[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Escaping special characters for *nix file path

Subject: Re: Escaping special characters for *nix file path
From: Wolfgang Laun <wolfgang.laun@xxxxxxxxx>
Date: Sun, 29 Jul 2012 15:58:11 +0200
Re:  Escaping special characters for *nix file path
Hmm, I'm not sure you are done yet. If you are passing the escaped
pathname to a shell you might have to guard against more magic
characters. Try these:

touch a.txt b.txt
ls x[12].txt
ls x{1,2}.txt
ls x?.txt
ls x*.txt

A relatively safe way would be to enclose the path name in apostrophes
(') and escape all contained apostrophes and backslashes with a
backslash.

-W





On 29/07/2012, Lighton Phiri <lighton.phiri@xxxxxxxxx> wrote:
> Great! Thank you.I guess all I needed to do was revise my regular
> expression skills. I eventually settled for the expression below. I
> couldn't quite figure out how to put the single quote with the second
> group and so I just use an extra replace function.
>
> replace(replace($filename,&quot;'&quot;,&quot;\\'&quot;),
> '(&quot;|\(|\)|\[|\]|\s+)', '\\$1')
>
> Lighton Phiri
> http://lightonphiri.org
>
>
> On 29 July 2012 14:53, Liam R E Quin <liam@xxxxxx> wrote:
>> On Sun, 2012-07-29 at 06:30 +0200, Lighton Phiri wrote:
>>
>>> Yes they are allowed, but special characters need to be escaped for
>>> one to access a file path.
>> [..]
>>> phiri@PHRLIG001:~$ touch ../data/Sites/3218AD Eland\'s
>>> Bay/Bobbejaansberg/BB15/testFile.txt
>>> touch: cannot touch `Bay/Bobbejaansberg/BB15/testFile.txt': No such
>>> file or directory
>>
>> This is because the shell splits arguments at spaces, so you actually
>> gave the touch command two filenames. If you used quotes
>> $ touch "../data/Sites/3218AD Eland's
>> Bay/Bobbejaansberg/BB15/testFile.txt"
>>
>> then it would work fine.
>>
>> It is not necessary to escape characters from the shell inside an XSLT
>> stylsheet, because the shell isn't involved.
>>
>> [...]
>>
>>> >replace($filename, "[ '\\`&;]", "\\&")
>>> >will probably do what you want.
>>> >Or use \s instead of space if there might be newlines.
>>> >You might also need to replace " with \"
>>>
>>> I am getting an error when I try what you suggested.
>>>
>>> <xsl:value-of select="{replace($filename, "[ '\\`&;]", "\\&")}" />
>>
>> You don't want the curly braces there - value-of is expecting an
>> expression, not a string.
>>
>> [...]
>>
>>> My file paths have special characters in them and those characters
>>> include 'square brackets', 'parentheses', 'ampersands', etc. all of
>>> which are interpreted differently by the regular expression given by
>>> second argument of replace function.
>>
>> That doesn't matter.
>>
>> Actually what I tend to do myself is something like
>>    replace($filename, "[^a-zA-Z0-9]+", "-")
>> to turn any sequence of characters other than letters or digits into a
>> hyphen. If it's a path rather than a filename, include / after the 9
>> there. But if the data is untrusted you should not normally allow /
>> inside it.
>>
>> Finally, as Mike Kay implied in a separate message, you probably want
>> \$0 as the replacement, not \& (I use too many regular expression
>> libraries, sorry)
>>
>> Liam
>>
>> --
>> Liam Quin - XML Activity Lead, W3C, http://www.w3.org/People/Quin/
>> Pictures from old books: http://fromoldbooks.org/
>> Ankh: irc.sorcery.net irc.gnome.org freenode/#xml

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.