PHP file_get_contents分解为&

时间:2013-04-05 08:31:05

标签: php file-get-contents

因为objective-c不编码& (因为它是保留的)你应该创建自己的方法。 资料来源:Sending an amp (&) using a post with Obj-C

对于我的iOS和Android应用,我使用php脚本来获取一些数据。该脚本有一个参数,它是一个链接。基本上这个脚本看起来像这样:

$link= urlVariable('link'); 
$source = file_get_contents($link);

$xml = new SimpleXMLElement($source);

//Do stuff with the xml

但是当我发送一个带有&的链接时符号它在file_get_contents上崩溃

Warning: file_get_contents(https://www.example.com/xxxx/name_more_names_) [function.file-get-contents]: failed to open stream: HTTP request failed!

但完整的论点是

name_more_names_&_more_names_after_the_ampersand.file

我尝试编码链接,然后将其发送到file_get_contents,没有运气。

也尝试过:

function file_get_contents_utf8($fn) {
     $content = file_get_contents($fn);
      return mb_convert_encoding($content, 'UTF-8',
          mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
}

具有相同的结果。

有人知道为什么它在&?我不是网络开发人员,而是应用程序开发人员,请原谅我对此主题缺乏了解。

修改 还试过这个:

$link= urlVariable('link'); 
$encodedLink = urlencode($link);
$source = file_get_contents($encodedLink);

结果如下:

Warning: file_get_contents(https%3A%2F%2Fwww.example.com%2Fxxxxx%2Fname_more_names_) [function.file-get-contents]: failed to open stream: No such file or directory in

编辑#2

我发现为什么我的网址会在&符号。我用这个方法从url中检索我的参数:

    function  urlVariable($pVariableName)
    {
        if (isset ($_GET[$pVariableName]))   
        {
            $lVariable = $_GET[$pVariableName];
        }
        else
        {
            $lVariable = null;
        }
        return $lVariable;
    }

和_GET()用&分隔参数。符号对吗?

2 个答案:

答案 0 :(得分:3)

网址应正确编码其&符号:

https://www.example.com/xxxx/name_more_names_%26_more_names_after_the_ampersand.file

在PHP中,您可以像这样编码路径:

$path = parse_url($url, PHP_URL_PATH);
$url = substr_replace($url, '/' . urlencode(substr($path, 1)), strpos($url, $path), strlen($path));

<强>更新

如果您还有树结构,则需要做更多工作:

$path = parse_url($url, PHP_URL_PATH);
$newpath = '/' . str_replace('%2F', '/', urlencode(substr($path, 1)));

$url = substr_replace($url, $newpath, strpos($url, $path), strlen($path));

更新2

如果您的脚本被调用为script?link=<some-url>,则需要确保<some-url>也已正确编码:

script?link=https%3A%2F%2Fwww.example.com%2Fxxxxx%2Fname_more_names_%26_more_names_after_the_ampersand.file

答案 1 :(得分:0)

使用

$url = urlencode($url);
$data = file_get_contents($url);