js encodeURIComponent

Рассматриваем ситуацию: js посылает, сервер принимает (php) и записывает в базу Mysql

JS encodeURIComponent

Сначала на JS функция encodeURIComponent кодирует любые символы, за исключением следующих:
латинские буквы abcABC
десятичные цифры 0123456789
спецсимволы - _ . ! ~ * ' ( )
в 3 байтовую кодировку , к примеру как картинке ниже:

фотка 1

Тут надо понимать, что более дополнительно делать ничего НЕ НАДО, потому-то любой символ нормально закодируется. То есть в таком формате можно спокойно передавать серверу.

И это не правда, а как же сам символ процент %. Если он используется при кодировании как служебный символ. Что с ним делать?

Его надо заменять на %  (это называется escape последовательность

фотка 2

var proc = /[%]/g; cont = cont.replace(proc,'%')

'%' - может показаться, что тут ошибка, но на самом деле именно так правильно. Дело в том, что функция replace в параметре замены сама зачем-то сначала заменяет escape последовательность на соответствующий символ (кто ее об этом просит...)

Надо сказать, что данные которые мы хотим послать на сервер, мы получаем на Js через jquery html() функцию для блока div, где расположено наше содержание. Блок div у нас contenteditable.

Это к тому, что html() уже сама заменяет некоторые спец символы такие как например, а вот символ не заменяет.

Все эти нюансы видны через console.log() в js.

Следующий этап после замены спец символов,  это посылка данных на сервер.

На сервере принимаем и декодируем через функцию url_decode(), это на php.

Далее декодированные данные надо например записать в базу данных Mysql и тут появляются такие нюансы:

Надо экранировать символы:

Одинарная кавычка '

Символ обратный слэш \

Возможно есть еще какие-то символы.Это делается только для этапа записи в Mysql.

Экранирование этих символов можно сделать на php через функцию mysqli_real_escape_string.

Таким образом в базе данных мы получим такие же  данные как и на стороне браузера в блоке div.

Надо отметить, что то что вы видите на странице браузера  какой-то символ типа & или % ещё не говорит, какие байты за ним стоят. Посмотреть можно просто исходный код страницы и все станет очевидно.

Данная страница как раз и демонстрирует механизм записи ее содержания в базу Mysql на сервере и ее последующее отображение вновь в браузере.

На этой странице можно спокойно писать все спец символы, все корректно будут отображаться: -&@#:;*"!?!, ( )/=%_'[]\|~`•÷©®™

И тут замечено, что ещё символ плюс забыли заменить на escape последовательность. Дело в том, что по умолчанию он будет заменяться на пробел.

Вот и все, чем хотелось поделится.Успехов!