2010-04-01 41 views
0

是療法任何內置在PHP函數POST串解碼在PHP

przysi%25C4%2599gam%2520s解碼%25C5%2582u%25C5%25BCy%25C4%2587

przysięgamsłużyć

+1

確定,該程序生成這些字符串知道它在做什麼?如果它是一個UTF-8 url編碼的字符串,它應該讀取'przysi%25%C4%25%99gam ...',也就是兩個字節都用url編碼。 – Boldewyn 2010-04-01 11:10:09

回答

2

好,戈登和馬諾斯,你都是對的(並且都錯了;)

這只是正常的「urldecode」,但應用兩次

$a = "przysi%25C4%2599gam%2520s%25C5%2582u%25C5%25BCy%25C4%2587"; 
$b = urldecode(urldecode($a)); 
var_dump($b); 
+0

這很有趣,因爲字符串正在使用encodeURLEntity()發佈一個凡人JS腳本 - 不知道爲什麼這些東西編碼了兩次然後 – clops 2010-04-01 12:03:43

+0

感謝您的支持! – clops 2010-04-01 12:04:10

0

你有沒有嘗試過這樣的:

function utf8_urldecode($str) { 
     $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str)); 
     return html_entity_decode($str,null,'UTF-8');; 
    } 

http://php.net/manual/en/function.urldecode.php

編輯摘自:您的初始字符串被搞砸了。你有兩次urlen代碼嗎?原因utf8_urldecode(utf8_urldecode($ encoded string))給出了正確的結果。

+0

在我的機器上給出了'przysi%C4%99gam%20s%C5%82u%C5%BCy%C4%87'。 – Gordon 2010-04-01 11:05:55

2

我的猜測是你有urldecode和多字節字符的問題。 Urldecode只能解碼8位字符,而你的字符串包含多字節字符。

檢查urldecode manual page comments的某些解決方案。