Escaping characters by doubling them in PHP

2019-09-19 19:57发布

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.

4条回答
仙女界的扛把子
2楼-- · 2019-09-19 20:39

Seems to me that

str_replace($char, $char.$char, $string);

and

str_replace($char.$char, $char, $string);

would be the complements of each other.

查看更多
甜甜的少女心
3楼-- · 2019-09-19 20:42

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.

查看更多
劳资没心,怎么记你
4楼-- · 2019-09-19 20:48

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?

查看更多
聊天终结者
5楼-- · 2019-09-19 20:56

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 ) 
查看更多
登录 后发表回答