2012-01-26 70 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