PHP file_get_contents和重音URL(4行代码示例)


PHP file_get_contents and accented URL (4 lines code sample)

我看了这里的其他问题,仍然无法解决这个问题。它可能看起来像是重复的,但像添加URL的urlencode这样的答案是不起作用的。

我正在尝试使用file_get_contents获取图像。这是代码:

 $works='http://static.groupalia.it/DealImage/Local/Epilazione-definitiva-con-IFL/Epilazione-definitiva-con-IFL/be71fdb9-4f7c-4e8e-ab4f-4d9742fa1acd.JPG';
 $url='http://static.groupalia.it/DealImage/Local/Hostaria-cacio-e-cocci--menù-x2/Hastaria-Cacio-e-Cocci-Menu--x2/933d79e8-103d-4ffe-b84b-70cf87b14f96.JPG';
 $img= file_get_contents ($url);
 if ( strlen($img) >1000) echo "WORKS!";

我正试图找到一个同时适用于URLS($works和$url)的解决方案。

如果我将urlencode添加到url,则$url和$works上都会出现"无法打开流"。

在所有这些情况下,什么是正确的解决方案?

你可以试试这个:

<?php
$works  ='http://static.groupalia.it/DealImage/Local/Epilazione-definitiva-con-IFL/Epilazione-definitiva-con-IFL/be71fdb9-4f7c-4e8e-ab4f-4d9742fa1acd.JPG';
$url    ='http://static.groupalia.it/DealImage/Local/Hostaria-cacio-e-cocci--menù-x2/Hastaria-Cacio-e-Cocci-Menu--x2/933d79e8-103d-4ffe-b84b-70cf87b14f96.JPG';
$transliterator = Transliterator::create('Latin-ASCII');
$img = file_get_contents($transliterator->transliterate($works));
if (strlen($img) >1000) {
    echo "WORKS!";
}

但是,imho,最好的解决方案是使用例如。https://github.com/Behat/Transliterator

最终成功:

setlocale(LC_ALL, 'en_US.utf8'); // required for iconv
$url= iconv("UTF-8", "ASCII//TRANSLIT", $url);

希望它能帮助其他人。