PHP url解码不起作用


PHP url decode does not work

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

percorsoWithOption.php?partenza=通过%20Gaspare%20Balbi%202–8&arrivo=通过%20Conca%20d'Oro&language=it_it&纬度=41.717835&经度=12.311369&endLatitude=41.679623&endLongitude=12.4484474&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");

日志报告的值几乎没有变化:

【2015年12月1日星期二12:25:22.556615】【:错误】【pid 20812】【客户端82.61.145.186:37526]*inizio**出发=Via Gaspare Balbi 2''xe2''x80''x938,到达=Via Conca d'Oro,纬度=41.717835,经度=12.311369【2015年12月1日星期二12:25:22.569876】[:error][pid 20812][client 82.61.145.186:37526]***离开=通过Gaspare Balbi2''xe2''x80''x938,到达=Via Conca d'Oro,纬度=41.717835,经度=12.311369基本上,2''xe2''x80''x938保持不变。

它不是"几乎不变",它的URL解码很好。唯一的问题是短划线在日志中显示为"''xe2''x80''x93"。

  1. 目前尚不清楚这是如何记录或查看值的问题,还是该值实际上是"''xe2''x80''x93"。要测试这一点,请在字符串中使用bin2hex(),看看它是显示为e28093(仅显示–字符)还是5c78...(字面意思是"''x…")
  2. 该短划线应发送URL,在URL中编码为%E2%80%93,而不是原始字符。在客户端上修复此问题

我最终使用了:

-(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解码可能与字符"-"有一些问题

您可以使用rawurldecode函数。