我需要複製將 >
轉換爲Â Â >Â Â
的方法。PHP檢查獲得字符串編碼後的請求
我有一個常數定義,它用作子類和父類之間的分隔符。
define('CATEGORY_SEPERATOR', ' > ')
//(常數可能會發生變化)
$sql .= "GROUP_CONCAT(c.name ORDER BY c.level SEPARATOR "'" . CATEGORY_SEPERATOR ."'") AS name
一個可能的結果可能是
row = array( 'name => category1 > category2 )
類別然後顯示爲一個鏈接列表
<li><a href="www.example.com/categories?&name=<?php echo $row['name'];?>"><?php echo $row['name'];?></a></li>
當單擊鏈接時,URLS被編碼。
地址欄:'www.example.com/categories?name=category1>產品組別
我希望能夠檢查是否CATEGORY_SEPERATOR
內$_GET['name']
存在。所以我可以執行
$name = $_GET['name'];
$categories = explode(CATEGORY_SEPERATOR, $name);
但在時間$_GET['name']
到達我的腳本它的甜菜轉換。
$_GET['name']
初始值
的var_dump:string 'category1Â Â >Â Â category2' (length=27)
後stripslashes()
(無變化)
的var_dump:string 'category1Â Â >Â Â category2' (length=27)
後htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
的var_dump:string 'category1Â Â >Â Â category2' (length=30)
現在,我已經成功地做稍微扭轉了以下
$_GET['name'] = htmlspecialchars_decode($_GET['name'], ENT_COMPAT);
if(ini_get('magic_quotes_gpc')){ $_GET['name'] = addcslashes($_GET['name']); }
但仍然需要從
category1Â Â >Â Â category2
得到它到 >
我試過使用urldeocde和rawurldecode,沒有任何運氣。
你抱怨'一個'?這是一個字符集問題。你的文本被破壞了,你需要修復它 - 沒有100%可靠的方法來檢測真正應該是什麼,以及什麼是破壞性的特徵。閱讀此:http://stackoverflow.com/questions/279170/utf-8-all-the-way-through –
謝謝,我認爲一些''''是' '的編碼版本。感謝您的鏈接 – TarranJones
' '是一個非破壞性的空間。它永遠不會顯示爲'',因爲它的定義是一個空格字符。 –