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

AJAX и спецсимволы
Привет всем! Нужна помощь.

Вот в ходе работы над очередным проектом осознал, что всё, хватит низкоуровневых ajax-запросов и прочего... В следущем обязательно перейду на jQuery ajax, поюзаю объекты в php и переведу базу в UTF...

Но пока всё так, как есть, поэтому сильно не пинать.
Суть проблемы: Есть контейнер, наполняется через ajax запрос.

Запрос стандартный:
function get_messages() {
  	if(mess_req) {
        var preloader = document.getElementById("messenger_result");  //показываем
	preloader.innerHTML = "<img src='images/preloader.gif' style='margin: 150px 0 0 200px;' alt=''>";
	mess_req.onreadystatechange = get_messages_response;
	mess_req.open("GET", "scripts/messenger.php", true);
	mess_req.send(null);
	return true;
    } else {return false;}
}


Всё это идёт на сервер и обрабатывается. Там же присутствует функция для замены всех символов на их кодировки для безопасной работы:
function universal($string) {
        $string = trim($string);
        $string = stripslashes($string);
        $string = htmlspecialchars($string);

        $string = str_replace(">","&#062;",$string);
        $string = str_replace("<","&#060;",$string);
        $string = str_replace("/","&#047;",$string);
        $string = nl2br($string);    
        $string = str_replace("(","&#040;",$string);
        $string = str_replace(")","&#041;",$string);
        $string = str_replace('"',"&#034;",$string);
        $string = str_replace("$","&#036;",$string);
        $string = str_replace("%","&#037;",$string);
        $string = str_replace("'","&#039;",$string);
        $string = str_replace("*","&#042;",$string);
        $string = str_replace(",","&#044;",$string);
        $string = str_replace("-","&#045;",$string);    
        $string = str_replace("=","&#061;",$string);    
        $string = str_replace("[","&#091;",$string);
        $string = str_replace("]","&#093;",$string);
        $string = str_replace("{","&#123;",$string);
        $string = str_replace("}","&#125;",$string);
        $string = str_replace("`","&#096;",$string);
        $string = str_replace("+","&#043;",$string);
        $string = str_replace("_","&#095;",$string);
        $string = str_replace("_","&#095;",$string);    
        $string = str_replace("№","&#8470;",$string);
        $string = str_replace("^","&#094;",$string);    
        $string = str_replace(":","&#058;",$string); 
        
        return $string;
        }


Ну вот. Когда responseText приходит обратно - все хорошо, за исключением этих самых символов. Они в таком виде (
&#058;
) и выводятся.

Недолго думая, сваял обратную функцию на js, что-то вроде:
function symbols(str) {
str = str.replace(/&#058;/g,":");
return str;
}


Не работает. Зашел в тупик. Без преобразования всех этих символов мне их в базу совать, естессна нельзя.

P.S. Хотя другие варианты по защите от sql-injection и прочего - приму с удовольствием. Спасибо.
Ответить с цитированием