繁体   English   中英

htmlentities破坏utf-8字符串

[英]htmlentities destroys utf-8 strings

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

htmlspecialchars($str, ENT_QUOTES, "UTF-8")

这在预防xss方面也比htmlentities()更好htmlentities()

在版本5.4.0中,encoding参数的默认值已更改为UTF-8。

资料来源: 手册

更改htmlentities()编码的唯一方法是在第三个参数中指定它。

无法更改默认编码。 在PHP 5.4之前它始终是iso-8859-1

这在PHP 5.4中已经改变,但现在总是utf-8

从PHP 手册 :htmlentities()采用可选的第三个参数编码,定义转换中使用的编码。 从PHP 5.6.0开始,default_charset值用作默认值。 从PHP 5.4.0开始,UTF-8是默认值。 在5.4.0之前的PHP,ISO-8859-1用作默认值。 尽管此参数在技术上是可选的,但我们强烈建议您为代码指定正确的值。

如果您不想担心这么多不同的字符集编码或者如果htmlentities不适合您,可以选择以下方法:我使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM