Ответ 1
htmlspecialchars($str, ENT_QUOTES, "UTF-8")
Это также лучше предотвращает xss, чем просто htmlentities()
У меня здесь что-то странное, и я не могу понять, почему на моем сервере php 5.2.5 (Just on Linux, php-серверы Windows не имеют такой же проблемы) Когда я использую форму POST для публикации содержимого на входе, содержащем "é", а с другой стороны I
echo(htmlentities($_POST["myinput"]))
it echos é
Но если я буду эхо меня
$_POST["myinput"]
просто он показывает "é", поэтому это означает, что мои htmlentities не используют UTF-8 по умолчанию, где я могу изменить Charset, используемый htmlentities?
Я попытался изменить его в моем php.ini default_charset = "UTF-8", но он тоже не сработает?
htmlspecialchars($str, ENT_QUOTES, "UTF-8")
Это также лучше предотвращает xss, чем просто htmlentities()
В версии 5.4.0 значение по умолчанию для параметра кодирования было изменено на UTF-8.
Источник: Manual
Единственный способ изменить кодировку htmlentities()
- указать ее в третьем параметре.
Невозможно изменить кодировку по умолчанию. До PHP 5.4 Это всегда iso-8859-1
.
Это было изменено в PHP 5.4, но теперь оно всегда utf-8
От php manual: htmlentities() принимает необязательную кодировку третьего аргумента, которая определяет кодировку, используемую при преобразовании. Из PHP 5.6.0 значение default_charset используется по умолчанию. Из PHP 5.4.0 UTF-8 по умолчанию. PHP до 5.4.0, ISO-8859-1 используется по умолчанию. Хотя этот аргумент технически необязателен, вам настоятельно рекомендуется указать правильное значение для вашего кода.
И если вы не хотите беспокоиться о стольких разных кодировках кодировки или если htmlentities не работает для вас, вот альтернатива: Я использовал mysqli DB connection (и PHPV5) сообщение формы для записи/вставки в MySQl DB.
$Notes = $_POST['Notes']; //can be text input or textarea.
$charset = mysqli_character_set_name($link); //mysqli connection
printf ("To check your character set but not necessary %s\n",$charset);
$Notes = str_replace('"', '"', $Notes); //double quotes for mailto: emails.
$von = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é"); //to correct double whitepaces as well
$zu = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é");
$Notes = str_replace($von, $zu, $Notes);
echo " Notes:".$Notes."<br>" ;
$Notes = mysqli_real_escape_string($link, $Notes); //for mysqli DB connection.
// Escapes special characters in a string for use in an SQL statement
echo " Notes:".$Notes ; //ready for inserting