通过HTML表单发布到PHP的损坏字符

时间:2012-01-26 20:28:59

标签: php html encoding utf-8

我知道这一定是一个相对简单的问题,但谷歌让我失望了。假设我有以下简单的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填充Σ而不是Σ

我理解为什么这是(在某种程度上),但我不知道如何修复帖子以阻止它发生。有什么想法吗?

2 个答案:

答案 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']));