2010-04-01 40 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的某些解决方案。