| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Сложная ситуация с PHP + Ajax |
| Автор: Selestin 21.10.2010, 00:07 | ||||||||||||||||||||||||
| Добрый вечер! Необходим совет. Ситуация довольно тривиальная для php программиста, я думаю каждый сталкивался с этим, но как решить эту задачу - я пока не понимаю. Суть: Существует некий Ajax скрипт, который отсылает запрос php скрипту, php скрипт в свою очередь генерирует javascript код, который по вызову onreadystatechange выполняется с помощью функции eval(). На этом Ajax запрос заканчивает свою работу. Возникло 2 вопроса: 1) Первый и самый важный. Допустим существует некая строка:
Ajax скрипт отсылает строку PHP скрипту с помощью POST запроса. Преобразования выполняемые перед отправкой: Заменим символы переноса строки на <br>, дабы записать данные в базу корректно, без лишних спец. символов, при этом сохранив смысл.
Обеспечим корректную кодировку запроса.
PHP скрипт: Загрузим POST переменную, ограничив длину в 50 символов, и сразу сконвертировав в нужную нам кодировку:
Запишем данные в базу, предварительно проэкранировав спецсимволы:
Строка сейчас имеет вид:
На этом работа PHP скрипта закончена, оповестим наш ajax, что данные записаны корректно, сгенерировав код выходного дива для дебага.
Вот тут то и начинается самая веселуха, дело в том, что отпечатав строку, хтмл выглядит так:
Образуется код вида:
HTML считает, что код онклика корректен до первой заэкранированной кавычки и вываливается в ошибку синтаксиса. Решения которые я вижу: 1) Добавить в строку str_replace("\\\"",""",$str), тогда кавычки заменятся на хтмл код, однако я не считаю это лучшим решением. 2) Добавить на выходе что-то типа htmlspecialchars(), Однако в этом случае строка будет выглядеть вот так:
Лишние палки оставшиеся от экранирования мне не нужны. Вопрос: Как корректно обрабатывать данные из базы, ведь из базы данные всегда будут экранированы \", дабы собрать корректный js вызов функции? Как вообще обычно решаются такие задачи? Второй вопрос: Как известно выполнение Ajax скрипта ловят с помощью функции onreadystatechange, однако написав ajax функцию мы заранее задаем поведение скрипта, например вот так:
Какой способ обычно используют, чтобы после успешно отработанного аякс запроса, выполнить нужную функцию. Ведь вызвать функцию, имеющую динамические аргументы, которые я получаю из аякс запроса, будет нельзя, т.к. в Ajax функции невозможно получить доступ к внешним переменным+это не безопасно, вдруг их значение измениться, а передавать сотни параметров в хидер AJAX запроса - не лучший вариант, ведь функций может быть много. Пока решаю эту проблему только Eval(), хороший ли это вариант? Пример функции:
Спасибо. |
| Автор: Selestin 21.10.2010, 11:52 |
| 1) Решено с помощью отката экранирования функцией stripslashes() 2) Актуально. |