我知道这一定是一个相对简单的问题,但谷歌让我失望了。假设我有以下简单的PHP文档(没有关于安全性,SQL注入,XSS等的讨论。这只是一个简单的例子来说明我的编码问题):
<?php
if(!empty($_POST['message'])) {
file_put_contents($filename, $_POST['message']);
}
?>
<!DOCTYPE html>
<html>
<head><meta http-equiv="content-type" content="text/html;charset=utf-8"/></head>
<body>
<form method="post" action="?">
<textarea name="message">
<?php echo htmlentities(file_get_contents($filename))?>
</textarea>
<input type="submit"/>
</form>
</body>
</html>
现在,我在表单中输入Σ并提交。当页面重新加载时,textarea填充Σ而不是Σ。
我理解为什么这是(在某种程度上),但我不知道如何修复帖子以阻止它发生。有什么想法吗?
答案 0 :(得分:3)
htmlentities
默认使用ISO-8859-1作为输入,但是你输入utf-8 ...,所以正确的方法是htmlentities($string, ENT_COMPAT,"UTF-8");
在这种情况下,我宁愿选择htmlspecialchars
,但不应该需要其他实体。
答案 1 :(得分:1)
我看到您正在向文件添加文本,然后将该文件拉回来。在将信息添加到文件时,您是否尝试使用utf8_encode()
。
file_put_contents($filename, utf8_encode($_POST['message']));