繁体   English   中英

PHP htmlentities和htmlspecialchars打破了我的弦

[英]PHP htmlentities and htmlspecialchars are breaking my strings

我的应用程序中有一个description字段,如果我添加了这样的引号:“它将破坏所有内容。 我在整个说明字段上都使用了htmlentities(),因此我尝试了htmlspecialchars(),但它也坏了。

在下面的屏幕截图中,我发送了字符串“我希望它能正常工作”,并引起关注

这是通过htmlentities运行后我的字符串的样子 这是通过htmlentities运行后我的字符串的样子

我过去曾遇到过此问题,但不确定如何解决。

我通过更改代码来解决了这个问题

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

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

您可能需要研究mb_ereg_replace功能并手动替换不安全的字符:

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

这就是使字符串成为HTML安全字符串所真正需要的。 我似乎找不到一个多字节安全的str_replace ,但这也可以正常工作,它将确保您永远不会遇到UTF-8字符的问题。

暂无
暂无

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

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