一般用PHP程式寫入文本中,為了安全和編碼相容性
會使用 htmlspecialchars 將特殊字元轉換特殊字元成為HTML實體
並且將跳脫字元(逃脫字元)避免掉
自動加上反斜線,以利資料庫正確安全的寫入和讀取
但是如果只需使用一般文件之間的寫入和讀取時,
則無須這樣的程序
反而會在每次寫入文本時增加一個反斜線 \
後台管理者每次編輯一次文章都會增加一個反斜線 \
越來越多....像這樣 \"\"\"\"
如果遇到這樣的問題
只要將 htmlspecialchars 用 stripslashes 代替掉即可
例1:
$txt =
htmlspecialchars($txt);
改成
$txt =
stripslashes($txt);
例2:
fwrite($re_text,$_POST[context],60000);
改成
fwrite($re_text,
stripslashes($_POST[context]),60000);
這樣就可以避免掉寫入讀取之間的反斜線了,PHP就不會再用反斜線來逃脫特殊的字元了。
引用:
stripslashes --- 去除addslashes( )引用的斜線
語法 : string stripslashes (string str)
說明 :
傳回去除反斜線後的字串,連續的二個反斜線會成為一個反斜線。
引用:
htmlspecialchars --- 轉換特殊字元成為HTML實體
語法 : string htmlspecialchars (string string)
說明 :
在HTML中有些字元有著特殊的含義,如果要保留它們的意義則需要以HTML實體來表示它,此函式傳回轉換後的字串。
此函式用在預防使用者提供的文字中包含了HTML的標記,像是佈告欄或是訪客留言板這方面的應用。
目前轉換的字元有以下幾種:
'&' (and符號)轉換成 '&'
'"' (雙引號)轉換成 '"'
'<' (小於)轉換成 '<'
'>' (大於)轉換成 '>'
此函式不轉換上面以外的符號,要完整的實體轉換請使用htmlentities( )
引用:
<< htmlspecialchars >>
只針對部份特殊字元處理, 所以未指定字串實際編碼時,仍然可以正確運作。
<< htmlentities >>
針對全部字元處理,所以若未指定字串正確編碼時,就很慘了。
以下面這個例子來說...
<?php
$str='htmlentities測試頁面';
echo htmlentities($str, ENT_QUOTES, 'BIG5')."<p>\n\n";
$str='htmlspecialchars測試頁面';
echo htmlspecialchars($str, ENT_QUOTES, 'BIG5');
?>
'BIG5'去掉, htmlentities() 處理過的字串,中間若有中文字,就會變成亂碼。
所以說... 就相容性與可攜性而言,htmlspecialchars() 是比較高的。
htmlentities() 是比較嚴格,但若沒指定正確編碼,那就會有不如預期的結果。
[
本帖最後由 gatdk1 於 2008-10-4 08:20 編輯 ]