發新話題

[原創] PHP反斜線去除、保留方法與時機 stripslashes

PHP反斜線去除、保留方法與時機 stripslashes

一般用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符號)轉換成 '&'
          '"' (雙引號)轉換成 '"'
          '<' (小於)轉換成 '&lt;'
          '>' (大於)轉換成 '&gt;'
    此函式不轉換上面以外的符號,要完整的實體轉換請使用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 編輯 ]

TOP

有好用的方法,可省很多的麻煩,減少時間的浪費。
謝謝謝!

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。