gpt4 book ai didi

php - file_get_contents() 失败,URL 中有特殊字符

转载 作者:行者123 更新时间:2023-12-04 00:40:57 27 4
gpt4 key购买 nike

我需要从瑞典字母表中获取一些包含某些字符的 URL。

如果您以 https://en.wikipedia.org/wiki/Åland_Islands 这样的字符串为例,将其直接传递到 file_get_contents作为参数调用就可以了。但是,如果您通过 urlencode 运行该 URL首先,调用失败并显示以下消息:

failed to open stream: No such file or directory



尽管有 file_get_contents 的文档说:

Note: If you're opening a URI with special characters, such as spaces, you need to encode the URI with urlencode().



例如,如果您运行以下代码:
error_reporting(E_ALL);
ini_set("display_errors", true);

$url = urlencode("https://en.wikipedia.org/wiki/Åland_Islands");

$response = file_get_contents($url);
if($response === false) {
die('file get contents has failed');
}
echo $response;

你会得到错误。如果您只是从代码中删除“urlencode”,它会运行得很好。

我面临的问题是我的 URL 中有一个参数来自提交的表单。由于 PHP 总是通过 urlencode 运行提交的值。 ,我构建的 URL 中的瑞典字符会导致错误发生。

我该如何解决这个问题?

最佳答案

问题可能是由于 urlencode 转义了您的协议(protocol)​​:

https://en.wikipedia.org/wiki/Åland_Islands
https%3A%2F%2Fen.wikipedia.org%2Fwiki%2F%C3%85land_Islands

这是我也遇到过的问题,只能通过尝试将转义目标定位到逃生所需的内容来解决:
https://en.wikipedia.org/wiki/Åland_Islands
https://en.wikipedia.org/wiki/%C3%85land_Islands

根据您的角色所在的位置,可以想象这很棘手。我通常选择编码补丁解决方案,但与我共事过的一些人更喜欢只编码其 url 的动态段。

这是我的方法:
https://en.wikipedia.org/wiki/Åland_Islands
https%3A%2F%2Fen.wikipedia.org%2Fwiki%2F%C3%85land_Islands
https://en.wikipedia.org/wiki/%C3%85land_Islands

代码:
$url = 'https://en.wikipedia.org/wiki/Åland_Islands';
$encodedUrl = urlencode($url);
$fixedEncodedUrl = str_replace(['%2F', '%3A'], ['/', ':'], $encodedUrl);

希望能帮助到你。

关于php - file_get_contents() 失败,URL 中有特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31097744/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com