Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.04.2009, 10:16
Аспирант
Отправить личное сообщение для olgatcpip Посмотреть профиль Найти все сообщения от olgatcpip
 
Регистрация: 09.04.2009
Сообщений: 63

преобразовать спец символы
Здравствуйте.

У меня задача следующая: пользователь вводит название элемента, это название я хочу передать в url. В переменную name записываю собственно строку-название.
получается , что url='http://lalala.ru/ttt.php?name='+name;
Но вот проблема: Если пользователь введет название такое: йцуке&climat
то когда я в php скрипте обрабатываю get строку, то name получается = йцуке

Вот меня и интересует, как преобразовать '?' и '&' символы? Есть ли уже готовые методы?
Мне в голову не приходит ничего кроме как заменять &-спецсимвол на комбинацию символов, а в php скрипте сделать обратное преобразование. Но и этот подход имеет свои недостатки.


Подскажите что сделать?
Ответить с цитированием
  #2 (permalink)  
Старый 09.04.2009, 10:18
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Функция encodeURIComponent.
Ответить с цитированием
  #3 (permalink)  
Старый 09.04.2009, 10:29
Аспирант
Отправить личное сообщение для olgatcpip Посмотреть профиль Найти все сообщения от olgatcpip
 
Регистрация: 09.04.2009
Сообщений: 63

Спасибо. Поняла.
И ещё вопросик. В javascript есть аналог htmlspecialchars?

Последний раз редактировалось olgatcpip, 09.04.2009 в 10:38.
Ответить с цитированием
  #4 (permalink)  
Старый 09.04.2009, 10:48
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от olgatcpip
В javascript есть аналог htmlspecialchars?
Нативного аналога нет. Реализовать можно, например, так
function escapeHTML(str) {
        var div = document.createElement('DIV');
        var text = document.createTextNode(str);
        div.appendChild(text);
        return div.innerHTML;
}
Ответить с цитированием
  #5 (permalink)  
Старый 09.04.2009, 11:23
Аспирант
Отправить личное сообщение для olgatcpip Посмотреть профиль Найти все сообщения от olgatcpip
 
Регистрация: 09.04.2009
Сообщений: 63

Спасибо, помогло.
Ответить с цитированием
  #6 (permalink)  
Старый 24.04.2009, 03:38
rush1
 
Сообщений: n/a

function OpenRequest( url, par, delegate )
{
if(window.ActiveXObject)
req = new ActiveXObject("Microsoft.XMLHTTP");
else
req = new XMLHttpRequest();

if( delegate ) req.onreadystatechange = delegate;
req.open("POST", url, false);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8' );
alert(par);//for debug
req.send( par );
}

......
var url = 'какой-то url';
var desc = '&^?/*@\;123';
var par1 = 'debug=1&param=' + encodeURIComponent(desc);
OpenRequest( url, par1, null );

Запрос отсылается не совсем корректно. Все спецсимволы экранируются
правильно (видно в alert(par)), но ";" и все что после не отсылается. На сервере появляется только '&^?/*@\' Помогите разобраться.
Ответить с цитированием
  #7 (permalink)  
Старый 24.04.2009, 05:28
Аспирант
Отправить личное сообщение для olgatcpip Посмотреть профиль Найти все сообщения от olgatcpip
 
Регистрация: 09.04.2009
Сообщений: 63

Всем огромное спасибо. Тема закрыта.
Ответить с цитированием
  #8 (permalink)  
Старый 25.04.2009, 00:58
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

rush1 у меня твой код нормально работает... кроме того, в строку не мог попасть back slash (\)
olgatcpip, у человека появился вопрос по теме, можешь отписаться, если тебя не интересует продолжение дискуссии
p.s. кстати, есть подозрение, что есть более подходящий способ решения твоей проблемы по сравнению с эмулированием htmlspecialchars
Ответить с цитированием
  #9 (permalink)  
Старый 25.04.2009, 07:44
Аспирант
Отправить личное сообщение для olgatcpip Посмотреть профиль Найти все сообщения от olgatcpip
 
Регистрация: 09.04.2009
Сообщений: 63

Я воспользовалась encodeURIComponent.
т.е раньше url весь кодировала с помощью encodeURI, а теперь только поле name. (строковые поля)
Я отправляю данные GET ом.
Еще подозреваю, что POST решил бы мои проблемы разом.
Ответить с цитированием
  #10 (permalink)  
Старый 25.04.2009, 15:46
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

encodeURIComponent и encodeURI отличаются набором символов, которые кодируют, причем у encodeURIComponent набор по-больше, так как он рассчитан на значение или название параметра, в отличие от encodeURI (весь URI)
для POST тоже надо пользоваться encodeURIComponent
а зачем эмулировать htmlspecialchars я до сих пор не знаю
p.s. есть еще такая вот ссылка - http://xmlhttprequest.ru/#encoding
p.p.s. какое практическое применение у encodeURI я даже не знаю
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
преобразование кодов в символы 777 Общие вопросы Javascript 5 26.03.2009 11:58