Здравствуйте! Скрипт расширения выводит неправильно(а может браузер так воспринимает) названия товаров в <input>. Если в названии товара встречается двойная кавычка " то в инпуте отображается часть имени, идущая до первой кавычки. Если смотреть код элемента инструментами разработчика Хром, то видно что оставшаяся невидная часть названия товара интерпретируется как набор атрибутов элемента input. Если я подменяю вывод в коде с echo $this->product->product_name; на echo htmlentities($this->product->product_name); либо echo htmlspecialchars($this->product->product_name); то в первый раз после подмены при открытии карточки товара на редактирование в инпуте имя товара отображается вместе с кавычками. После нажатия кнопки Save в карточке товара название товара начинает отображаться с " вместо кавычек. Если же в коде вывод наименования поставить следующий код: echo str_replace('"', "&qout;", $this->product->product_name); то после сохранения товара его имя в карточке отображается с &qout; в названии и повторное сохранение приводит к сохранению этих &qout; в имени и соответственно к отображению таких наименований на сайте. ! Правда если руками переписать эти &qout; на " и нажать Сохранить, проблем с кавычками не возникает больше, сколько бы данный товар ни сохранял потом. Посоветуйте, пожалуйста, в каком направлении надо копать(направление вывода, либо ввода в БД) и как копать , чтобы при открытии карточки товара кавычки отображались и адекватно сохранялись
Подобная фигня гарантированно возникает когда программисты начинают совать предметы в неподходящие отверстия. Экранирование данных для БД и экранирование для странички это две абсолютно разные операции и делать их надо в верном контексте. Действие функций описано в официальной справке. ВСЁ ОЧЕНЬ ПРОСТО И НЕ НАДО ИЗОБРЕТАТЬ НИКАКИХ САМОДЕЛОК. При записи в БД: mysql_real_escape_string (или аналог) либо подготовленные запросы с параметрами либо приведение к целому через intval() — выбор зависит от используемого интерфейса к БД и типа данных. Пожалуйста! Никаких стр-/прег-реплейсов! При выводе на страницу: htmlentities или htmlspecialchars, выбор зависит от места применения. Пожалуйста! Никаких стр-/прег-реплейсов! Для удобства использования советую взять любую, блеать, авторитетную оболочку над БД, типа safemysql или один раз написать свою и больше НИКОГДА не экранировать данные "ручками" в прикладном коде. Пусть параметры обрабатывает интерфейсный класс: единообразно и скучно. То же самое с выводом HTML: любой, блеать, известный шаблонизатор имеет вывод с экранированием. Не экономьте микросекунды на этом, важнее правильный результат.
Спасибо. htmlentites внедрил. Когда начал копать, что происходит при записи в БД, то выяснил, что после строки вида: Код (Text): return filter_var_array($var, $filter); где в $filter сидит константа FILTER_SANITIZE_SPECIAL_CHARS(в отладчике имеет значение 515) все красивые кавычки превращаются в " Получается надо тут в цикле ко всем элементам массива $var, в котором хранятся записываемые значения, применить функцию mysql_real_escape_string. Я правильно понял?