PHP htmlentities和htmlspecialchars破坏了我的字符串

时间:2012-03-14 15:47:03

标签: php html

我的应用程序中有一个描述字段,如果我包含这样的引用:'它会破坏一切。我在整个描述字段中使用了htmlentities(),所以我尝试了htmlspecialchars()但它也会中断。

在下面的屏幕截图中,我发送了字符串“我想这样工作”并得到了跟随的混乱

This is what my string looks like after being run through htmlentities This is what my string looks like after being run through htmlentities

我过去曾遇到过这个问题,但我不确定如何修复它。

3 个答案:

答案 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('&rsquo;', '&amp;'); // replace it here
  $description_field = str_replace($bad, $good, $description_field);
?>

答案 2 :(得分:0)

我很确定htmlentitieshtmlspecialchars不是UTF-8安全功能。他们将Unicode字符的第一个字节视为要编码的HTML实体,然后当浏览器读取所谓的UTF-8内容时,它会看到一个HTML实体,后面跟着两个无效字节。

您可能需要查看mb_ereg_replace等函数并手动替换不安全的字符:

$output = mb_ereg_replace("/</","&lt;",$input);

这就是真正所有需要使字符串HTML安全。我似乎无法找到多字节安全的str_replace,但这也很有用,它将确保您永远不会遇到UTF-8字符问题。