[請益] htmlentities

看板PHP作者 (胖胖)時間15年前 (2010/03/08 16:46), 編輯推噓6(6020)
留言26則, 4人參與, 最新討論串1/1
想請問各位一下 之前看到某個網站的寫法 我知道htmlentities()是可以過濾掉使用者輸入html語法,或者是script等等 不過之後又用html_entity_decode()讀出來 這樣不是等於白做了嗎?? 還是我對這兩個函式有誤解 感謝指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.135.168.71

03/08 17:28, , 1F
這樣的話他的目的不是針對 html 或是 javascript
03/08 17:28, 1F

03/08 17:29, , 2F
而是避免發生 SQL injection ... \
03/08 17:29, 2F

03/08 17:31, , 3F
指的是單引號之類的嗎?
03/08 17:31, 3F

03/08 22:48, , 4F
這個函式是對於「"」「'」「<」「>」這一類的符號採用特殊
03/08 22:48, 4F

03/08 22:48, , 5F
碼的方式來轉換,好處是可以避免資料或資料庫存取錯誤。
03/08 22:48, 5F

03/08 22:49, , 6F
以前可能很多人都會用addslashes來處理脫逸字的問題。
03/08 22:49, 6F

03/08 22:50, , 7F
但用這個函式就可以變成像是&lt; &quot;這樣的形式存在。
03/08 22:50, 7F

03/08 22:50, , 8F
當然你取出的話就要將他反轉還原回來。
03/08 22:50, 8F

03/08 22:51, , 9F
否則假設你存入的是HTML的話,沒有反轉你的網頁就亂掉了。
03/08 22:51, 9F

03/08 23:29, , 10F
可是我剛剛試不用html_entity_decode解出來
03/08 23:29, 10F

03/08 23:31, , 11F
&quot;&amp; 這類的也是會顯示正常分別是雙引號 跟 &
03/08 23:31, 11F

03/08 23:32, , 12F
假如我用將<a href='xxx'>xxx</a>用htmlentities處理後
03/08 23:32, 12F

03/08 23:33, , 13F
你可以試試看開啟原始檔,看看你看到的是什麼碼。
03/08 23:33, 13F

03/08 23:33, , 14F
另外他只針對部份特殊字元碼轉換,而不是什麼字都轉。
03/08 23:33, 14F

03/08 23:33, , 15F
他會顯示<a href='xxx'>xxx</a> 大於小於都會正常顯示出來
03/08 23:33, 15F

03/08 23:34, , 16F
如果在用html_entitiy_decode還原,會變成一個xxx的超連結
03/08 23:34, 16F

03/08 23:36, , 17F
那正常啊!網頁中顯示HTML碼不對吧!
03/08 23:36, 17F

03/08 23:39, , 18F
有時候我為了展示一些原始檔在網頁上,就會把HTML的特別符
03/08 23:39, 18F

03/08 23:39, , 19F
號用&lt;的方式來呈現。否則會變成網頁型態。
03/08 23:39, 19F

03/08 23:40, , 20F
像奇摩知識家正是因為少了轉碼的過程。
03/08 23:40, 20F

03/08 23:40, , 21F
導致使用者問HTML時,「<」之後都會被視為HTML碼而消失。
03/08 23:40, 21F

03/08 23:41, , 22F
但因為實習生以上就具有使用編輯器的功能,反而就正常了。
03/08 23:41, 22F

03/08 23:44, , 23F
&lt;span&rt;123&lt;/span&rt;,經過瀏覽器會變成
03/08 23:44, 23F

03/08 23:44, , 24F
<span>123</span>。
03/08 23:44, 24F

03/08 23:45, , 25F
但如果你原始碼是上面這行的話,則只會顯示123。
03/08 23:45, 25F

03/08 23:47, , 26F
感謝您的講解~~
03/08 23:47, 26F
文章代碼(AID): #1BbBbqT0 (PHP)
文章代碼(AID): #1BbBbqT0 (PHP)