Я разрабатываю приложение MVC с PHP, которое использует XML и XSLT для печати представлений.Он должен быть полностью поддержан UTF-8.Я также использую MySQL, настроенный с помощью UTF8.Моя проблема заключается в следующем.
У меня есть <input type="text"/>
со значением вроде àáèéìíòóùú "> <'@ # ~! ¡¿? </strong>. Это обрабатывается для добавления его в базу данныхЯ использую mysql_real_escape_string($_POST["name"])
, а затем делаю MySQL INSERT
. Это добавит косую черту \ before " и '.
База данных MySQL имеет DEFAULT CHARACTER SET utf8
и COLLOCATE utf8_spanish_ci
.Поле таблицы является обычным VARCHAR
.
Затем я должен напечатать это на XML, который будет преобразован с помощью XSLT.Я могу использовать PHP на XML, поэтому я повторяю его с <?php echo TexUtils::obtainSqlText($value_obtained_from_sql); ?>
.Функция receiveSqlText () фактически возвращает то же самое, что обработанное значение $, ожидает окончательной структуры.
Одна из первых вещей, которые мне понадобятся для выбранного ввода, - преобразование> и <</strong> до >
и <
, поскольку это вызовет проблемы с тегами начала / конца.Это будет сделано с <?php htmlspecialchars($string, ENT_QUOTES, "UTF-8"); ?>
.Это также преобразует & в &
, " в "
и ' в '
. Это большая проблема: XSLT начинает давать сбойпотому что он не распознает все специальные символы HTML.
Существует еще одна проблема. Я говорил о вводе àáèéìíòóùú "> <'@ # ~! ¡¿? * </strong>, но у меня будеткакой-нибудь текст из CKEditor <textarea />
, который будет выглядеть так:
<p>
<a href="http://stackoverflow.com/">àáèéìíòóùú"><'@#~!¡¿?</a>
</p>
Как мне управлять этим?Сначала, если я хочу напечатать это второе значение правильно, мне нужно будет использовать <xsl:value-of select="value" disable-output-escaping="yes" />
.Будет ли "> <'</strong> печатать правильно?
Так что я действительно ищу, как мне нужно управлять этими значениями и как я должен печатать. Мне нужно что-то использовать, если естьисходящий из VARCHAR
, который не позволяет использовать HTML, а другой - если TEXT
(например) и разрешает HTML? Мне нужно будет использовать disable-output-escaping = "yes" каждый раз?
Я также хочу знать, действительно ли при этом я защищаю запрос от атак XSS.
Заранее спасибо!