Есть две проблемы.
Во-первых, вы дважды кодируете символы HTML, используя как htmlentities
, так и htmlspecialchars
. Обе эти функции делают одно и то же, но htmlspecialchars
делает это только с подмножеством символов, которые имеют эквиваленты символов HTML (специальные). Таким образом, в вашем примере амперсанд будет закодирован дважды ( так как это является специальным символом), поэтому на самом деле вы получите следующее:
$example = 'Welcome & This is a test paragraph';
$example = htmlentities($example);
var_dump($example); // 'Welcome & This is a test paragraph'
$example = htmlspecialchars($example);
var_dump($example); // 'Welcome & This is a test paragraph'
Решите, какую из этих функций вам нужно использовать (вероятно, htmlspecialchars
будет достаточно) и используйте только одну из них.
Во-вторых, вы используете эти функции не в то время. htmlentities
и htmlspecialchars
ничего не сделают для "очистки" ваших данных для ввода в базу данных. (Не говорю, что это то, что вы намереваетесь, поскольку вы не упомянули об этом, но многие люди, похоже, пытаются это сделать.) Если вы хотите защитить себя от внедрения SQL, привяжите свои значения к подготовленным операторам. Экранирование, как вы сейчас делаете с mysqli_real_escape_string
, хорошо , но этого действительно недостаточно.
htmlspecialchars
и htmlentities
имеют определенные цели: конвертировать символы в строки, которые вы собираетесь вывести в документ HTML. Просто подождите, чтобы использовать их, пока вы не будете готовы это сделать.
person
Don't Panic
schedule
10.04.2017
html_entity_decode
является аналогомhtmlentities
: лучше измените свой sql, чтобы использовать подготовленный оператор, и привяжите$_POST['text']
к запросу. Я думаю, что вы делаете, чтобы испортить исходные данные. - person JustOnUnderMillions   schedule 10.04.2017