我的应用程序中有一个描述字段,如果我包含这样的引用:'它会破坏一切。我在整个描述字段中使用了htmlentities(),所以我尝试了htmlspecialchars()但它也会中断。
在下面的屏幕截图中,我发送了字符串“我想这样工作”并得到了跟随的混乱
This is what my string looks like after being run through htmlentities
我过去曾遇到过这个问题,但我不确定如何修复它。
答案 0 :(得分:5)
我通过更改
中的代码来解决问题$text = htmlentities( $text, ENT_QUOTES );
为:
$text = htmlentities( $text, ENT_QUOTES, 'utf-8' );
这很奇怪,因为PHP将默认设置列为utf-8。
答案 1 :(得分:1)
如果我只需要替换某些字符,我有时会创建一个简单的查找和替换脚本。
<?php
$bad = array('’', '&'); // add whatever you don't want here
$good = array('’', '&'); // replace it here
$description_field = str_replace($bad, $good, $description_field);
?>
答案 2 :(得分:0)
我很确定htmlentities
和htmlspecialchars
不是UTF-8安全功能。他们将Unicode字符的第一个字节视为要编码的HTML实体,然后当浏览器读取所谓的UTF-8内容时,它会看到一个HTML实体,后面跟着两个无效字节。
您可能需要查看mb_ereg_replace
等函数并手动替换不安全的字符:
$output = mb_ereg_replace("/</","<",$input);
这就是真正所有需要使字符串HTML安全。我似乎无法找到多字节安全的str_replace
,但这也很有用,它将确保您永远不会遇到UTF-8字符问题。