我在这里发生了一些奇怪的事情,我无法理解为什么,在我的php 5.2.5服务器上(仅在Linux上,Windows php服务器没有同样的问题) 当我使用POST表单在包含“é”的输入上发布内容时,在另一侧发布
echo(htmlentities($_POST["myinput"]))
它回声é
但如果我回应我的
$_POST["myinput"]
只是它显示“é”,所以这意味着我的htmlentities默认不使用UTF-8,我在哪里可以更改htmlentities使用的Charset?
我尝试在我的php.ini default_charset =“UTF-8”中更改它,但它也不起作用?
答案 0 :(得分:52)
htmlspecialchars($str, ENT_QUOTES, "UTF-8")
这在预防xss方面也比htmlentities()
答案 1 :(得分:5)
在版本5.4.0中,encoding参数的默认值已更改为UTF-8。
来源:Manual
答案 2 :(得分:3)
更改htmlentities()
编码的唯一方法是在第三个参数中指定它。
无法更改默认编码。 PHP 5.4之前始终是iso-8859-1
。
但是在PHP 5.4中已经改变了,现在总是utf-8
答案 3 :(得分:1)
来自php manual:htmlentities()采用可选的第三个参数编码来定义转换中使用的编码。从PHP 5.6.0开始,default_charset值用作默认值。从PHP 5.4.0开始,UTF-8是默认值。在5.4.0之前的PHP,ISO-8859-1用作默认值。尽管此参数在技术上是可选的,但我们强烈建议您为代码指定正确的值。
答案 4 :(得分:0)
如果您不想担心这么多不同的字符集编码或者如果不适合您,那么可以选择以下方法: 我使用mysqli DB连接(和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