htmlentities破坏utf-8字符串

时间:2011-04-15 16:30:36

标签: php

我在这里发生了一些奇怪的事情,我无法理解为什么,在我的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”中更改它,但它也不起作用?

5 个答案:

答案 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