Проблема кодирования при использовании метода htmlentities


У меня проблема с кодировкой символов в php, поэтому вот код php:

n_event=$_GET['ndlann'];
$nom_complet=htmlentities(stripslashes($_POST['nom']));
$email_comment=htmlentities(stripslashes($_POST['email']));
$titre_comment=htmlentities(stripslashes($_POST['titre']));
$texte_comment=htmlentities(stripslashes(nl2br($_POST['commentaire'])));
$pays_comment=$_POST['pays'];
$date_ajout=date('Y/m/d');

Данные будут добавлены в таблицу базы данных, вы видите, что эти данные поступают из формы комментариев, поэтому, когда пользователь вводит некоторые комментарии с каракулями на восточных языках (арабский, иврит... и т. Д.), Входные данные изменятся на что-то вроде:

ØÙ�را Ø1Ù�-� اÙ�-�-�ضÙ�Ø

Я попытался удалить метод htmlentities, и это работает нормально, но возникает другая проблема безопасность формы комментариев (будут выполняться сценарии js)

Что я могу сделать в этой ситуации?

И спасибо

Author: SmootQ, 2011-01-25

2 answers

Никогда не используйте htmlentities().

Эта функция давно устарела. Вместо этого используйте htmlspecialchars().

У вас также есть куча ерунды в вашем коде

  • Выполнение htmlentities(nl2br(*)) не имеет смысла.

  • Сделайте косые черты условными, только если установлены магические кавычки.

  • Возможна проблема с полем pays.

  • Я также боюсь, что вы используете htmlentities как своего рода функцию сопровождения SQL. Неужели я правильно?

 2
Author: Your Common Sense, 2011-01-25 10:52:41

На мой взгляд, и согласно документу PHP, принятый ответ неверен. Нигде не написано, что эта функция устарела.

Если вы правильно зададите третий аргумент функции, называемый $encoding, это решит вашу проблему.

Я надеюсь, что это поможет.

 2
Author: Alexandre Bourlier, 2014-12-16 13:39:44