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”。
- 不清楚这是否是值的记录或查看方式问题,或者值是否实际上“\xe2\x80\x93”。要对此进行测试,请在您的字符串上使用
bin2hex()
并查看它是否显示为 e28093
(只是 – 字符)或 5c78...
(字面意思是“\x...”)。
- 破折号应在 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 解码可能对字符“-”有一些问题
我在解码从 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”。
- 不清楚这是否是值的记录或查看方式问题,或者值是否实际上“\xe2\x80\x93”。要对此进行测试,请在您的字符串上使用
bin2hex()
并查看它是否显示为e28093
(只是 – 字符)或5c78...
(字面意思是“\x...”)。 - 破折号应在 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 解码可能对字符“-”有一些问题