Php 我得到的编码url不是由$_GET[tag]解码的,例如%5Cu003d,它将解码=&引用;

Php 我得到的编码url不是由$_GET[tag]解码的,例如%5Cu003d,它将解码=&引用;,php,unicode,get,Php,Unicode,Get,我发现一些用户请求带有编码URL的页面,但却无法通过$\u get[tag]解码 我心目中最坏的罪犯是%5Cu003d,但还有其他人。在这个例子中 page.php?标记%5Cu003d44应该是page.php?标记=44,因为%5C是/so/u003D是unicode 003D或“=” 我不知道是什么网站对这个URL进行了编码,但我正在尝试在不手动解码的情况下为人们提供他们想要的东西。是否有一些开关或方法来实现这一点,以便$\u能够正常工作?可能不会吧 我尝试将此标题发送到SO上的其他讨论,

我发现一些用户请求带有编码URL的页面,但却无法通过$\u get[tag]解码

我心目中最坏的罪犯是%5Cu003d,但还有其他人。在这个例子中 page.php?标记%5Cu003d44应该是page.php?标记=44,因为%5C是/so/u003D是unicode 003D或“=”

我不知道是什么网站对这个URL进行了编码,但我正在尝试在不手动解码的情况下为人们提供他们想要的东西。是否有一些开关或方法来实现这一点,以便$\u能够正常工作?可能不会吧

我尝试将此标题发送到SO上的其他讨论,但没有任何帮助。 标题('Content-type:text/html;charset=utf-8')

编辑*****************************

以下是错误URL的更多示例:

page.php?lat=25.79&amp%3Blon=-80.16
page.php?lat=41.46u0026lon%3D-82.71
page.php?lat%5Cu003d30.31%5Cu0026lon%5Cu003d-89.33
page.php?lat=28.94-89.4&lon

如果这是我的项目,我可能不会尊重这些URL——即使利益相关者问得很好。这真的是一团糟,而且在解码过程中数据很可能会被破坏。。。但如果你想试一试,你可以这样开始:

代码:()

输出:

array (
  'lat' => '25.79',
  'lon' => '-80.16',
)
array (
  'lat' => '41.46',
  'lon' => '-82.71',
)
array (
  'lat' => '30.31',
  'lon' => '-89.33',
)
array (
  'lat' => '28.94-89.4',    // <-- I guess you'll need to massage this into the correct shape too
  'lon' => '',
)
array (
  'tag' => '44',
)
数组(
“lat”=>“25.79”,
“lon”=>“-80.16”,
)
排列(
“lat”=>“41.46”,
“lon”=>“-82.71”,
)
排列(
'lat'=>'30.31',
“lon”=>“-89.33”,
)
排列(

‘lat’=>‘28.94-89.4’,//我决定尝试解码坏的URL,因为也不知为什么它们显示来自我的页面。我担心一些设备正在对呼叫进行编码,可能是Android,可能是一些新浏览器。我不知道是什么在编码它们,但由于一些似乎来自我的网站,我认为我应该修复它们它们。只是澄清一下,这是一个嵌入在我的一个网站中的php图像。到目前为止,这已经捕获了过去几天的所有实例。想法是获取查询字符串并缓慢解码,然后手动获取两个变量,但前提是它们没有使用正常过程成功解码。这样,我只处理调用否则我会拒绝,所以任何意外的后果都是轻微的

<?
$latitude = trim(strip_tags($_GET['lat']));
$longitude = trim(strip_tags($_GET['lon']));
$request = getenv("QUERY_STRING");
$request = urldecode($request);// get rid of %5C type conversions
$request = unicode_decode($request);// with the %5c stuff removed, convert any unicode
$i = strpos($request,"lon");
$j = strpos($request,"lat");
// only decode things that didn't work with normal $_GET
if ($i != "" && $longitude == "") $longitude = substr($request,$i+4) + 0;
if (($j != "" || $j == 0) && $latitude == "") $latitude = substr($request,$j+4) + 0;
?>

我想我们需要查看您的一组损坏的查询字符串,以便更好地了解您正在处理的问题。使用的是什么框架?是否有任何重定向发生?仅使用一个示例字符串,这是我能提供的最好结果,但我不愿意发布答案,因为您的da使用的方法太多了ta可能会有所不同。@mickmackusa感谢您的回复。我正在寻找一种解决方案,其中$\u GET或同等产品可以通过运行某些标题或打开某些开关或使用其他功能来进行解码。也就是说,我将用更多示例编辑我的帖子。是的,必须对您的url进行手术不是一种稳定/专业的解决方案。您应该不需要做任何这种胡闹的事。请更清楚、更一致地说明您收到的URL。您发布的第一个URL以
page.php
开头,第二个URL以
之后我希望看到的URL开头(查询字符串的开头)。再说一次……是否有框架或重定向?这些URL的潜在来源是什么?如果它们来自您的应用程序中,那么您需要能够将它们追溯到js或html源。我希望我知道URL的来源是什么。是的,示例在URL中的?之后。很抱歉造成混淆。我已经尝试过search对于他们来说没有成功。getenv(“HTTP_REFERER”)没有返回任何内容,而且它们肯定不是来自应该返回的地方,这是我网站的另一个页面。(它们是php图像)忽略它们不是不合理的,但我想知道是否有一个简单的解决方案。我将接受这个答案和建议“如果这是我的项目,我可能不会尊重这些URL——即使利益相关者提出了很好的要求。”因此,我不会更改我的代码,而只是提供一条很好的消息,告诉我如何单击安装页面以获得正确的URL。如果这些URL来自web上的其他地方,那就太糟糕了。
<?
$latitude = trim(strip_tags($_GET['lat']));
$longitude = trim(strip_tags($_GET['lon']));
$request = getenv("QUERY_STRING");
$request = urldecode($request);// get rid of %5C type conversions
$request = unicode_decode($request);// with the %5c stuff removed, convert any unicode
$i = strpos($request,"lon");
$j = strpos($request,"lat");
// only decode things that didn't work with normal $_GET
if ($i != "" && $longitude == "") $longitude = substr($request,$i+4) + 0;
if (($j != "" || $j == 0) && $latitude == "") $latitude = substr($request,$j+4) + 0;
?>