Is there a simple way to escape/unescape an arbitrary character in PHP by doubling it, for example:
- in ANSI SQL,
"you can ""escape"" this way"
- in printf(),
you can express a %% this way
Escaping is quite easy with str_replace()
, but reversing the process to unescape the string is not that easy, so does anyone know of a pair of functions, or a library to do this?
The idea is that I need to serialize an array this way:
array('a','b', '~','c')
=> 'a~b~~~~c'
The individual strings cannot be empty.
Update: just realized that this "encoding" is broken, thanks to the useful comments below.
Seems to me that
str_replace($char, $char.$char, $string);
and
str_replace($char.$char, $char, $string);
would be the complements of each other.
As several users pointed it out in the comments, this question is flawed and has no possible answer.
A detailed explanation of my goal, and an appropriate answer have been provided at Provide a human-readable representation of an identifier?
Take a look at addcslashes()
and stripcslashes
which will allow you to slash those characters you want to. That's maybe helpful.
Next to that your question does not really say where exactly you see a problem in unescaping, so I can not offer anything else than using the str_replace
in reverse.
Use preg_split() with
(?<!-)-(?!-)|(?:-)((?:-{2})+)(?:-)
You have to use the flag PREG_SPLIT_DELIM_CAPTURE.
After some struggling, I am quite surprised that there actually is a regex solution for this.
a-b----c-hl--g------lo-x
becomes
Array ( [0] => a [1] => b [2] => -- [3] => c [4] => hl--g [5] => ---- [6] => lo [7] => x )