Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP url解码不起作用_Php_Urldecode - Fatal编程技术网

PHP url解码不起作用

PHP url解码不起作用,php,urldecode,Php,Urldecode,我在解码从iOS应用程序收到的url时遇到问题;该url属于以下类型: percorsoWithOption.php?partenza=Via%20Gaspare%20Balbi%202–8&arrivo=Via%20Conca%20d'Oro&language=it_it&latude=41.717835&longitude=12.311369&endlatudio=41.679623&endLongitude=12.484474&json=1 当我尝试在以下位置解码时: 它被解码得很好。 但

我在解码从iOS应用程序收到的url时遇到问题;该url属于以下类型:

percorsoWithOption.php?partenza=Via%20Gaspare%20Balbi%202–8&arrivo=Via%20Conca%20d'Oro&language=it_it&latude=41.717835&longitude=12.311369&endlatudio=41.679623&endLongitude=12.484474&json=1

当我尝试在以下位置解码时: 它被解码得很好。 但当我申请时:

if (isset($_GET['arrivo'])) $arrivo=$_GET['arrivo'];
if (isset($_GET['partenza'])) $partenza=$_GET['partenza'];
error_log("*inizio**departure=$partenza, arrival=$arrivo,   latitude=$latitude, longitude=$longitude");
if (isset($partenza)) $partenza=urldecode($partenza);
if (isset($arrivo)) $arrivo=urldecode($arrivo);
error_log("***departure=$partenza, arrival=$arrivo, latitude=$latitude, longitude=$longitude");
日志报告的值几乎没有变化:

[Tue Dec 01 12:25:22.566615 2015][错误][pid 20812][客户 82.61.145.186:37526]*出发=经加斯帕雷-巴尔比2\xe2\x80\x938,到达=经孔卡-多罗,纬度=41.717835, 经度=12.311369[周二12:01:25:22.569876 2015] [:error][pid 20812][client 82.61.145.186:37526]***出发=通过加斯帕雷-巴尔比 2\xe2\x80\x938,到达=经孔卡德奥罗,纬度=41.717835, 经度=12.311369 基本上,2\xe2\x80\x938保持不变

您可以使用这个函数。

它不是“几乎不变”,它只是URL解码而已。唯一的问题是,en破折号在日志中显示为“\xe2\x80\x93”

  • 目前尚不清楚这是一个如何记录或查看值的问题,还是该值实际上是“\xe2\x80\x93”。要测试这一点,请在字符串上使用
    bin2hex()
    ,查看它是显示为
    e28093
    (仅显示–字符)还是
    5c78…
    (字面意思是“\x…”)
  • 该破折号应发送到URL中编码为
    %E2%80%93
    的URL,而不是原始字符。在客户端上修复此问题
  • 我最终使用了:

    -(NSString*)stripNonStandardAndEncode:(NSString*)origin{
         NSMutableCharacterSet *charactersToKeep = [NSMutableCharacterSet alphanumericCharacterSet];
        [charactersToKeep addCharactersInString:@" ,.'"];
    
        NSCharacterSet *charactersToRemove = [charactersToKeep invertedSet];
    
        NSString *trimmedReplacement = [[ origin componentsSeparatedByCharactersInSet:charactersToRemove] componentsJoinedByString:@""];
        return [trimmedReplacement stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    }
    

    现在php可以无缝地处理它:url decode可能在字符“-”方面有一些问题

    不幸的是,2\xe2\x80\x938即使使用RawUrlDecode也保持不变。我使用simple:[start stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]在目标c中对字符串进行编码我还在网上尝试了一个字符串扩展,结果也一样。我不能告诉你如何在ObjC中正确地执行它,这需要另一个问题。我写的,这是很标准的。我可以建议你检查一下这是否仅仅是你的日志记录问题,或者您的值是否真的被奇怪地解码为
    \x..
    。我甚至尝试了:[通过添加PercentEncodingWithAllowedCharacters开始字符串:[NSCharacterSet URLHostAllowedCharacterSet]];使用相同的生成url。奇怪的是:你可以自己试着去解码它们。这暗示了php支持存在问题。