php中url傳遞中文字符,特殊危險(xiǎn)字符的解決方法
我們需要在url中傳遞中文字符或是其它的html等特殊字符,似乎總會(huì)有各種亂,不同的瀏覽器對(duì)他們的編碼又不一樣,
對(duì)于中文,一般的做法是:
把這些文本字符串傳給url之前,先進(jìn)行urlencode($text)一下;
但是對(duì)于一些很“危險(xiǎn)”的字符,比如說html字符,甚至是SQL注入相關(guān)的字符,如果很明顯的傳給系統(tǒng),出于安全考慮,系統(tǒng)一般都會(huì)把它們過濾掉的。
現(xiàn)在,我們需要這些危險(xiǎn)字符,該這么辦?
我想到的辦法是 先給它們 base64_encode($text) 編碼,到服務(wù)端時(shí),又給它們 base64_decode($text) 解碼,
貌似很完美,但是在使用的過程中又遇到一個(gè)問題,base64_encode 編碼后的字符串中含有 "/", "+", "=" 等字符,
base64_encode()函數(shù)由于要在url中傳用戶輸入觀點(diǎn)(少量的內(nèi)容),當(dāng)用戶提交(post提交)過來的是一個(gè)數(shù)組.所以我把觀點(diǎn)用bse64_encode()函數(shù)給加密.當(dāng)跳轉(zhuǎn)到處理頁面時(shí),我再給get接收,這時(shí)出現(xiàn)兩邊加密的數(shù)據(jù)不對(duì).少了一個(gè)+字符.
用戶提交加密:
tPK9tNPNyKUsuse6xyYjNDY7JiM0NjsufMavwcEhfMyrxq/BwcHLLMjDztLO3tPvLNXmz+vI69ehsKEhfHw=
在處理頁面用get接收到的:
tPK9tNPNyKUsuse6xyYjNDY7JiM0NjsufMavwcEhfMyrxq/BwcHLLMjDztLO3tPvLNXmz vI69ehsKEhfHw=
對(duì)比找到少了一個(gè)加號(hào),不知道是什么原因?qū)е频?猜想可能是get時(shí),+字符可能不能得到吧!).還請(qǐng)高手指點(diǎn).
這些字符在url編碼中又是特殊字符,比如 "+" ,它就表示 “空格”,但是不同的瀏覽器對(duì)“空格”的編碼又不一樣,有的是用“+”表示,有的是用“20%”表示,也就是說,讓這些base64_encode編碼后的字符串在url中傳遞,用不同的瀏覽器去瀏覽時(shí),服務(wù)端得到值不一樣。
于是乎,想到了一個(gè)折中辦法,先將這些base64編碼后的特殊字符替換掉,到服務(wù)端后,又替換回來:
解決方法:
一.在用戶提交加密串的時(shí)間,我把+字符給換成別的字字符.如:str_replace('+', '_', $content);
二.在處理頁面再次轉(zhuǎn)換一次:如:str_replace('_', '+', $content);
function base_encode($str) {
$src = array("/","+","=");
$dist = array("_a","_b","_c");
$old = base64_encode($str);
$new = str_replace($src,$dist,$old);
return $new;
}
function base_decode($str) {
$src = array("_a","_b","_c");
$dist = array("/","+","=");
$old = str_replace($src,$dist,$str);
$new = base64_decode($old);
return $new;
}
下面是在瀏覽器中得到的效果
xOO6w6Osuf65_aiy_atL_b00Ke5_b8jnus6ho6GjoaM_c
urldecode實(shí)例方法很簡(jiǎn)單
urldecode ( string $str )
解碼給出的已編碼字符串中的任何 %##。返回解碼后的字符串。
Example #1 urldecode() 例子
<?php
$a = explode('&', $QUERY_STRING);
$i = 0;
while ($i < count($a)) {
$b = split('=', $a[$i]);
echo 'Value for parameter ', htmlspecialchars(urldecode($b[0])),
' is ', htmlspecialchars(urldecode($b[1])), "<br /> ";
$i++;
}
?>
相關(guān)文章
PHP中uploaded_files函數(shù)使用方法詳解
PHP uploaded_files函數(shù)的功能非常強(qiáng)大,希望通過這篇文章中介紹的內(nèi)容能夠幫助我們解決相關(guān)問題,提高我們對(duì)PHP語言的了解程度。2011-03-03
PHP使用正則表達(dá)式實(shí)現(xiàn)過濾非法字符串功能示例
這篇文章主要介紹了PHP使用正則表達(dá)式實(shí)現(xiàn)過濾非法字符串功能,結(jié)合留言板數(shù)據(jù)提交功能示例分析了php使用正則表達(dá)式preg_replace函數(shù)進(jìn)行字符串正則替換相關(guān)操作技巧,需要的朋友可以參考下2018-06-06
PHP+swoole+linux實(shí)現(xiàn)系統(tǒng)監(jiān)控和性能優(yōu)化操作示例
這篇文章主要介紹了PHP+swoole+linux實(shí)現(xiàn)系統(tǒng)監(jiān)控和性能優(yōu)化操作,結(jié)合實(shí)例形式分析了php啟動(dòng)swoole及Linux性能監(jiān)控相關(guān)操作技巧,需要的朋友可以參考下2019-04-04
php自定義函數(shù)實(shí)現(xiàn)二維數(shù)組排序功能
這篇文章主要介紹了php自定義函數(shù)實(shí)現(xiàn)二維數(shù)組排序功能,涉及php針對(duì)數(shù)組的判斷、遍歷、轉(zhuǎn)換、排序等相關(guān)操作技巧,需要的朋友可以參考下2016-07-07
解析在zend Farmework下如何創(chuàng)立一個(gè)FORM表單
本篇文章是對(duì)在zend Farmework下如何創(chuàng)立一個(gè)FORM表單的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
PHP動(dòng)態(tài)頁生成靜態(tài)頁的3種常用方法
這篇文章主要介紹了PHP動(dòng)態(tài)頁生成靜態(tài)頁的3種常用方法,通過三種不同的方法從不同的角度實(shí)現(xiàn)這一功能,有很好的參考借鑒價(jià)值,需要的朋友可以參考下2014-11-11
PHP函數(shù)preg_match_all正則表達(dá)式的基本使用詳細(xì)解析
以下是對(duì)PHP中的函數(shù)preg_match_all正則表達(dá)式的基本使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-08-08
PHP實(shí)現(xiàn)判斷二叉樹是否對(duì)稱的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)判斷二叉樹是否對(duì)稱的方法,涉及php遞歸二叉樹判斷節(jié)點(diǎn)的相關(guān)操作技巧,需要的朋友可以參考下2018-01-01

