2012-04-26 115 views
3

我有下面的代码不工作。意味着ITMS服务不会通过获取请求调用URL。如何在PHP中的ITMS URL中发送获取请求?

header('Location: itms-services://?action=download-manifest&url=http://www.mysite.com/plistReader.php?id=123'); 

如果我删除id=123其开始工作。但我需要发送这个以保持身份证动态。在Session中我也无法通过。请帮忙。

+2

尝试逃脱,和 '=' 分别%3F和%3D '?':URL = HTTP://www.mysite.com/plistReader.php%3Fid%3D123 – wroniasty 2012-04-26 15:57:23

+0

谢谢... ..它的工作..... – Varun 2012-04-26 16:18:23

回答

5

您需要对该问号进行网址编码,因为它是一个保留字符%3F。正如@wroniasty所指出的那样,您还需要将=编码为%3D

header('Location: itms-services://?action=download-manifest&url=http://www.mysite.com/plistReader.php%3Fid%3D123'); 

参见:http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

+0

谢谢它工作.....只是在%34使用%3F – Varun 2012-04-26 16:18:54

+0

@Varun,良好的捕获的地方小修正。错字固定。 – Brad 2012-04-26 16:19:34

0

切勿用手逃避网址字符。让PHP 5的函数 - urlencode(),http_build_query() - 为您做好工作。这避免了某些GET参数名称/值对可能包含需要传输的敏感字符的问题。

<?php 
    $base_url = "http://www.mysite.com/plistReader.php"; 
    $data = Array("id" => 123, "dangerous" => ":?&= are some sensitive chars"); 

    $itms_url = "itms-services://?action=download-manifest&url=" . urlencode($base_url . "?" . http_build_query($data)); 
    header('Location: ' . $itms_url); 
?>