【发布时间】:2022-01-21 11:21:48
【问题描述】:
我一直在想我已经想出了完美的功能来解决我的问题,但我最终找到了一些没有明显原因的东西。我不完全理解 htmlentities / htmlspecialchars 是如何工作的,或者它们究竟转换了什么,所以我想这会有所帮助......
我混合了新旧数据库以及用户输入
-
- 旧数据库有时使用 htmlentities() 对字符进行编码 数据内部
- 旧数据库偶尔会在内容中包含 HTML(需要剥离)
- 新数据库字符在插入之前未编码
-
- 用户输入可能包括讨厌的
<script>或<script><script/> - 新数据库字符在插入之前未编码
- 用户输入可能包括讨厌的
我正在尝试创建一个包罗万象的功能,让每个案例(#1 和 #2)都安全且具有视觉吸引力
function html_enc($text){
while($text!==html_entity_decode($text,ENT_HTML5,'UTF-8')){
$text=html_entity_decode($text,ENT_HTML5,'UTF-8');
}
$text=strip_tags($text);
$text=htmlentities($text,ENT_HTML5,'UTF-8');
return $text;
}
我以为我已经用这个函数确定了第 1 点,但是当我在页面标题上使用它时,它的标题中有双引号,并且页面吐出 &quot; 而不是“,但其余部分页面显示“...我不明白为什么<title> 元素会与正常主体不同...有谁知道如何解决这个小问题?还是建议更好的功能/改进?
对于第 2 点,这似乎也是最好的解决方案 - 我还没有通过用户输入和标准显示在页面/文本区域中破坏此功能
另外,为了安全起见;我的代码假设用户输入是以 HTML 形式发布的 UTF-8,我的所有页面都已指定
<head>
<meta charset="UTF-8"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
用户是否可以提交不同的编码?我想它是,这将如何影响我的功能?有可能抓住这个吗?
【问题讨论】:
标签: php html encoding character-encoding page-title