东京热成人网站_XX另类XX伦理XXAV_亚洲精品无码成人AAA片_高清av中文字幕无码_手机看片国产欧美日韩高清_bd美妙第进化型

咨詢電話:
15628812133
20
2024/08

PHP靈異現(xiàn)象之--相同內(nèi)容的字符串為什么字符串長度不一樣

發(fā)布時間:2024-08-20 16:10:00
發(fā)布者:已經(jīng)寫了
瀏覽量:
0

最近在開發(fā)項(xiàng)目的時候,定義了一個內(nèi)容比較多的數(shù)組,目的呢是為了在多個功能點(diǎn)不用多次的去定義這個數(shù)組,畢竟內(nèi)容很多重復(fù)定義看起來也很不舒服,為了更好的儲存這個數(shù)組的數(shù)據(jù)啊,我直接把他格式化成了JSON字符串,存到數(shù)據(jù)庫里面去,這樣也可以通過后臺去管理和修改這個數(shù)組的內(nèi)容,來實(shí)現(xiàn)相關(guān)的功能。

但是在調(diào)用的時候卻發(fā)生了一個靈異的事件,明明直接使用JSON_DECODE方法就可以把json字符串還原成數(shù)組了,結(jié)果卻返回了null,很是奇怪,于是我就打印了一下這個json字符串,輸出的內(nèi)容沒問題啊,格式也沒問題。

PHP靈異現(xiàn)象之--相同內(nèi)容的字符串為什么字符串長度不一樣

如圖,上下兩個變量輸出的內(nèi)容一摸一樣。但是奇怪的是長度,長度竟然不一樣,有點(diǎn)奇怪啊。很明顯兩個字符串的結(jié)構(gòu)和內(nèi)容都是一樣的,但是長度不一樣,我就考慮難道是字符集發(fā)生了變化嗎,這么奇怪嗎,但是用mb_detect_encoding函數(shù)打印了一下字符串的字符集,結(jié)果是UTF-8沒有問題。

這個時候,有點(diǎn)無解了啊,很明顯這個長的字符串里面有很多隱形的字節(jié)啊,導(dǎo)致了json_decode反序列化json字符串失敗了。然后我就想里面是不是又什么\n\r的字符啊,看不到的字符。用字符串替換了一下,也沒有反應(yīng)。

最后發(fā)現(xiàn)原來是,提交數(shù)據(jù)的時候由于對數(shù)據(jù)又XSS過濾功能,直接被htmlspecialchars函數(shù)把我這些內(nèi)容給換為 HTML 實(shí)體了,結(jié)果可不就是在打印的時候沒有任何的變化,但是字符串的長度比原有的長度長了很多。找到問題,解決問題就比較簡單了,把內(nèi)容使用htmlspecialchars_decode函數(shù)將內(nèi)容重新格式化為字符串,在json_decode轉(zhuǎn)換成數(shù)組,就可以正常使用了。

返回列表