Избегайте символов, удваивая их в PHP - PullRequest
0 голосов
/ 22 июня 2011

Существует ли простой способ экранирования / удаления произвольного символа в PHP путем его удвоения, например:

  • в ANSI SQL, "you can ""escape"" this way"
  • в printf (), you can express a %% this way

Экранирование довольно просто с str_replace(), но отменить процесс для удаления строки не так просто, так кто-нибудь знает пару функций или библиотеку для этого?

Идея состоит в том, что мне нужно сериализовать массив следующим образом:

array('a','b', '~','c') => 'a~b~~~~c'

Отдельные строки не могут быть пустыми .

Обновление : только что понял, что эта "кодировка" не работает, благодаря полезным комментариям ниже.

Ответы [ 4 ]

1 голос
/ 29 июля 2011

Как отметили несколько пользователей в комментариях, этот вопрос некорректен и не имеет возможного ответа.

Подробное объяснение моей цели и соответствующий ответ предоставлены на Предоставить удобочитаемое представление идентификатора?

1 голос
/ 22 июня 2011

Мне кажется, что

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

и

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

будут дополнением друг друга.

0 голосов
/ 22 июня 2011

Используйте preg_split () с

(?<!-)-(?!-)|(?:-)((?:-{2})+)(?:-)

Вы должны использовать флаг PREG_SPLIT_DELIM_CAPTURE.После некоторой борьбы, я весьма удивлен, что на самом деле есть решение для регулярных выражений.

a-b----c-hl--g------lo-x

становится

Array ( [0] => a [1] => b [2] => -- [3] => c [4] => hl--g [5] => ---- [6] => lo [7] => x ) 
0 голосов
/ 22 июня 2011

Взгляните на addcslashes() и stripcslashes, которые позволят вам сократить количество символов, которые вы хотите. Это может быть полезно.

Кроме того, в вашем вопросе не сказано, где именно вы видите проблему в эскейпинге, поэтому я не могу предложить ничего другого, кроме использования str_replace в обратном порядке.

...