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

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

Итак, я попытался найти и заменить перед отправкой "% plus%", но получил сообщение об ошибке:

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

Код:

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

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

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

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

2
Fribu - Smart Solutions 13 Июл 2010 в 18:15

2 ответа

Лучший ответ

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

Этого недостаточно. Если вам не удается кодировать 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, поэтому не работает.

6
bobince 13 Июл 2010 в 16:01

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

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

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

4
kennytm 13 Июл 2010 в 14:25