PHP url 解码无效

PHP url decode does not work

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

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

当我尝试在以下位置对其进行解码时: Online decoder 它被解码得很好。 然而当我申请时:

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] [:error] [pid 20812] [client 82.61.145.186:37526] *inizio**departure=Via Gaspare Balbi 2\xe2\x80\x938, arrival=Via Conca d'Oro, latitude=41.717835, longitude=12.311369 [Tue Dec 01 12:25:22.569876 2015] [:error] [pid 20812] [client 82.61.145.186:37526] ***departure=Via Gaspare Balbi 2\xe2\x80\x938, arrival=Via Conca d'Oro, latitude=41.717835, longitude=12.311369 basically the 2\xe2\x80\x938 is left untouched.

您可以使用rawurldecode函数。

不是"nearly unchanged",是URL-解码就好了。唯一的问题是 en dash 在您的日志中显示为“\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 解码可能对字符“-”有一些问题