Subject: Re: Escaping special characters for *nix file path
From: Liam R E Quin <liam@xxxxxx>
Date: Sat, 28 Jul 2012 23:39:52 -0400
|
On Sun, 2012-07-29 at 04:43 +0200, Lighton Phiri wrote:
> /data/Sites/3218AD Eland's Bay/Bobbejaansberg/BB15/
>
> For path above to be valid in *nix, I need to escape 'spaces', 'single
> quote' with 'backslash' to get output below
>
> /data/Sites/3218AD\ Eland\'s\ Bay/Bobbejaansberg/BB15/
Well, spaces and quotes are allowed in Unix (and Linux) filenames, so
I'm not sure what you are doing here.
>
> I've been trying to play around with the 'replace' function and
> 'disable-output-escaping', but can't seem to make it work --see
> snippet below.
>
> <xsl:value-of select="replace(replace(replace(replace(replace($filename,
> ' ', '\ '), '\(', '\('), ')', '\)'), '[',
> '\['), ']', '\]')" disable-output-escaping="yes" />
This is crazy.
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'm guessing you are passing the filename to a program, since you for
sure don't want to put backslashes in a path.
Also watch for filenames including things
like ../../../../../../etc/passwd :-)
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
|