2015-11-06 55 views
1

我需要複製將  >  轉換爲Â Â >Â Â的方法。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Â Â &gt;Â Â category2' (length=30)

現在,我已經成功地做稍微扭轉了以下

$_GET['name'] = htmlspecialchars_decode($_GET['name'], ENT_COMPAT);

if(ini_get('magic_quotes_gpc')){ $_GET['name'] = addcslashes($_GET['name']); }

但仍然需要從

category1Â Â >Â Â category2得到它到&nbsp;&nbsp;&gt;&nbsp;&nbsp;

我試過使用urldeocde和rawurldecode,沒有任何運氣。

+1

你抱怨'一個'?這是一個字符集問題。你的文本被破壞了,你需要修復它 - 沒有100%可靠的方法來檢測真正應該是什麼,以及什麼是破壞性的特徵。閱讀此:http://stackoverflow.com/questions/279170/utf-8-all-the-way-through –

+0

謝謝,我認爲一些''''是' '的編碼版本。感謝您的鏈接 – TarranJones

+0

' '是一個非破壞性的空間。它永遠不會顯示爲'',因爲它的定義是一個空格字符。 –

回答