2012-01-26 34 views
0

我知道这肯定是一个相对简单的问题,但Google让我失望了。说我有以下简单的PHP文件(安全性,SQL注入,XSS等没有讨论这仅仅是一个简单的例子来说明我的编码的问题):通过HTML表单向PHP发送已损坏的字符

<?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填充而不是Σ

我明白为什么这是(在某种程度上),但我不知道如何解决这个问题以阻止它发生。有任何想法吗?

+1

你的数据库是以UTF-8保存的吗? – Biotox

+1

哪个数据库? –

+0

没有数据库。文件。虽然我相信如果我保存到数据库也会发生同样的情况。 – steveo225

回答

2

htmlentities默认假设ISO-8859-1作为输入,但是你给它的UTF-8 ...,所以正确的方法是htmlentities($string, ENT_COMPAT,"UTF-8");

在这种情况下,我宁愿去但是,其他实体不应该被需要。

+0

没有意识到'htmlentities'的工作方式。使用'htmlspecialchars'它就像一个魅力,并且是给定我正在使用它的适当函数。谢谢 – steveo225

1

我看到您正在向文件添加文本,然后将该文件拉回。将信息添加到文件时是否尝试使用utf8_encode()

file_put_contents($filename, utf8_encode($_POST['message'])); 
+0

不幸的是,这给了我** ** – steveo225

+0

你尝试删除'htmlentities()'吗? – Biotox

+0

有趣的是......'utf8_decode'可以工作......但是更好的告诉'htmlentities'你有一个实际的utf8-string ...我的经验法则通常是:如果你服务于utf-8,并且你有'utf8_encode '或'utf8_decode'在你的代码中的任何地方,事实上是错误的。 – Wrikken