I'm trying to use preg_replace to escape all special characters in a multi-line string with a backslash, but this string gets passed out and passed back in repeatedly, so to avoid any confusion I wanted to use a regex which only escapes un-escaped special characters (also excluding spaces, newlines, carriage returns and the escape character itself). I.e.,:
$foo \$bar :\:\n
Should be escaped to become:
\$foo \$bar \:\:\n
And NOT escaped twice like below:
\$foo \\$bar \:\\:\\n
I've gotten close with the following:
preg_replace("/([^\\\\])([^a-z0-9\\\\ \r\n])/i","$1\\\\$2",$input);
But when two of the same special characters appear in sequence, only the first of the two gets escaped.
For example:
....
Becomes:
\..\..
But really I want:
\.\.\.\.
Sorry for the ridiculous issue, or if i'm doing anything stupid! Thanks in advance :)