Escape "+" с JS и PHP - PullRequest
2 голосов
/ 13 июля 2010

я сделал приложение,

Вы пишете некоторый текст, и текст будет сохранен через ajax. Перед отправкой запроса я избежал его с помощью js. Но каким-то образом символ "+" будет преобразован в "" символ пространства ...

Поэтому я попытался найти и заменить перед отправкой в ​​«% плюс%», но я получаю сообщение об ошибке:

Uncaught SyntaxError: Неверное регулярное выражение: / + /: Ничего не повторяется

Код:

var replace = "%plus%";
            while(title.search(sign) != -1) {
               title.replace("+", replace);
            }

Может быть, кто-то знает лучшее решение для этого ... я работаю с utf-8 ... и немецкими символами, такими как "ä", у меня также проблемы с "€" при получении его из БД через Ajax ... и много других персонажей ....

У меня отличные результаты, если я rawescape () в php и unescape () в js (но все еще есть проблемы с € ->% u20AC

Нужна помощь:)

Ответы [ 2 ]

6 голосов
/ 13 июля 2010

Поэтому я попытался найти и заменить перед отправкой в ​​«% плюс%»

Этого недостаточно.Если вам не удается URL-кодировать символ +, вы почти наверняка забудете что-либо кодировать в URL, и есть много других символов, которые вызовут сбой, если не кодировать URL, а не только знак плюс.

Вам необходимо использовать encodeURIComponent() при создании запроса для кодирования специальных символов внутри параметров:

var url= 'something?param='+encodeURIComponent(param)+'&other='+encodeURIComponent(other);

В противном случае любые символы, которые не помещаются в URL, могут привести к повреждению, включая + (что означает пробел, если он включен в параметр запроса; для действительного знака плюс вам потребуется %2B) и много других знаков пунктуации, а также все символы, не входящие в ASCII (например, должно быть %E2%82%AC,используя кодировку UTF-8).

Ни при каких обстоятельствах не используйте функции JavaScript escape() и unescape(). Это не URL-кодировка, а нестандартная кодировка, свойственнаяв JavaScript, который похож на кодировку URL, но не совместим.В частности, все символы не ASCII изуродованы, поэтому не будет работать.

4 голосов
/ 13 июля 2010

Чтобы соответствовать + в регулярном выражении, вам нужно его избежать, поскольку + сам по себе является специальным символом.

return theText.replace(/\+/g, "%plus%");

Кстати, правильная кодировка + - %2b. Для этого вы можете использовать encodeURIComponent в Javascript. (Не используйте escape, оно устарело.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...