[英]PHP htmlentities and htmlspecialchars are breaking my strings
我的应用程序中有一个description字段,如果我添加了这样的引号:“它将破坏所有内容。 我在整个说明字段上都使用了htmlentities(),因此我尝试了htmlspecialchars(),但它也坏了。
在下面的屏幕截图中,我发送了字符串“我希望它能正常工作”,并引起关注
我过去曾遇到过此问题,但不确定如何解决。
我通过更改代码来解决了这个问题
$text = htmlentities( $text, ENT_QUOTES );
至:
$text = htmlentities( $text, ENT_QUOTES, 'utf-8' );
这很奇怪,因为PHP将默认设置列为utf-8。
如果只需要替换某些字符,我有时会创建一个简单的查找和替换脚本。
<?php
$bad = array('’', '&'); // add whatever you don't want here
$good = array('’', '&'); // replace it here
$description_field = str_replace($bad, $good, $description_field);
?>
我很确定htmlentities
和htmlspecialchars
不是UTF-8安全函数。 他们将Unicode字符的第一个字节视为要编码的HTML实体,然后当浏览器读取所谓的UTF-8内容时,它会看到一个HTML实体,后跟两个无效字节。
您可能需要研究mb_ereg_replace
功能并手动替换不安全的字符:
$output = mb_ereg_replace("/</","<",$input);
这就是使字符串成为HTML安全字符串所真正需要的。 我似乎找不到一个多字节安全的str_replace
,但这也可以正常工作,它将确保您永远不会遇到UTF-8字符的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.