2017-03-03 47 views
1

我有一個編碼的字符串爲「%87123」。現在,當我顯示該字符串時,它應該被解碼爲「‡123」。我的代碼是象下面這樣:如何轉換解碼php中的一些特殊字符?

$code = '%87123'; 
echo urldecode($code); 
die; 

我曾與許多不同的功能,如,urldecode,rawurldecode,ヶ輛,的iconv和其他許多人試過。 如果有人能爲此提供幫助。 在此先感謝。

+1

不知道爲什麼你想到的是字符串得到解碼,以您的期望......嘗試'進行urlencode( '‡123')'我得到'%E2%80%A1123' ... – arkascha

回答

3

看起來像是一個url編碼版本的字符串,沒有在標準的UTF-8編碼(如今常用的,特別是在網絡環境中),但在老式的,MS-Windows專有的Windows-1252編碼。這確實是在某些MS-Windows版本仍在使用,爲MS試圖成爲一個有點不適應它與ISO-8859-1ISO-8859-15幾乎相同,但作爲典型。您現在遭受的是衆所周知的戰略的結果...

看看這個簡單的示例腳本:

<?php 
var_dump(urlencode('‡123')); 
var_dump(urldecode('%87123')); 
var_dump(iconv('Windows-1252', 'UTF-8', urldecode('%87123'))); 

輸出是:

string(12) "%E2%80%A1123" 
string(4) "�123" 
string(6) "‡123" 

所以解碼結果一些可以解釋爲Windows-1252編碼的字符串。如果是這樣,如果你然後將其轉換爲編碼爲UTF-8,你會得到預期的結果...

所以你的情況最有可能的是一些編碼在MS內部編碼的字符串被注入到Web環境中而沒有得到重新編碼。由於PHP無法以某種方式奇蹟般地猜測它執行了其解碼工作並提供了結果,這是一個無效的UTF-8編碼字符串。你必須告訴PHP它應該假定什麼編碼,它不可能自動檢測到。

+0

謝謝!這個對我有用。只是一個問題。你如何瞭解這個字符集? – Khushal

+0

很高興聽到我能幫助;-)我得到了超過無數的API,系統,工作流數據交換頗有些經驗,...要具體:在科學圖書館的整個歐洲的環境成長的歷史數據收集......這其中包括你在家門口突然發現的各種奇特的東西。隨着時間的流逝,你會感到好奇和不信任。在MS-Windows系統發揮作用的時刻,這種習慣尤其要求注意...... – arkascha