I'm having troubles with filenames upload by users which I have to process. When I try to access them, because some of them have special characters, the command used says the file is not found or similar.
I've used escapeshellcmd with no sucess.
When I use the "tab" key in linux console (when you have started to type the filename and you want it to complete), the bash escape the filename correctly, and if I use exactly that "escaped" filename, it works.
I've tried this:
preg_replace("/[^a-zA-Z0-9\-\.\s]/", "\\\\$0", $filename)
to escape everything except numbers, letters, - and spaces ... but I found that for file "test_1.jpg", this command converts it into "test_1.jpg", and it does not work, since "_" does NOT need to be converted.
I'm afraid there could be more "allowed" characters, so my question is ... how can i "clone" the escape function of "tab" key in linux console bash ?
Thank you !
I use this for both file names and for making URLs out of blog post titles and the like.
If you are accessing these files directly on your web server, your files names need to be url encoded with urlencode, not escapeshellcmd
this is the function I put together, hope it helps
you can all add more by adding | with another escaped character
If you want to use the file name as a shell command parameter you can use the function escapeshellarg.