file_get_contents – Специальные символы в URL-адресе – Специальный случай

Я не получаю file_get_contents (), чтобы вернуть страницу в этом конкретном случае, когда URL-адрес содержит символ «…».

$url = "https://se.timeedit.net/web/liu/db1/schema/s/s.html?tab=3&object=CM_949A11_1534_1603_DAG_DST_50_ÖVRIGT_1_1&type=subgroup&startdate=20150101&enddate=20300501" print file_get_contents($url); 

Как заставить file_get_contents () работать как ожидалось на этом URL-адресе?

Я пробовал следующие решения без рабочего результата:

1.

 print rawurlencode(utf8_encode($url)); 

2.

 print mb_convert_encoding($url, 'HTML-ENTITIES', "UTF-8"); 

3.

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

4.

 $content = file_get_contents($url); print mb_convert_encoding($content, 'UTF-8', mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true)); 

Найдено в этих вопросах:

file_get_contents – специальные символы в URL-адресе

PHP получить url со специальными символами без urlencode: их!

file_get_contents () Разбивает символы UTF-8

ОБНОВЛЕНИЕ. Как вы можете видеть, страница действительно возвращается в моем примере, но это не ожидаемая страница, та, которую вы получаете при вводе URL-адреса в браузере.

URL-адреса не могут содержать «…»! Начните с этой основной предпосылки. Любые символы, не входящие в узко определенное подмножество ASCII, должны быть закодированы в URL, чтобы быть представлены в URL-адресе. Правильный способ сделать это – urlencode или rawurlencode (в зависимости от того, какой формат ожидает сервер) отдельный сегмент URL, а не URL в целом .

Например:

 $url = sprintf('https://se.timeedit.net/web/liu/db1/schema/s/s.html?tab=3&object=%s&type=subgroup&startdate=20150101&enddate=20300501', rawurlencode('CM_949A11_1534_1603_DAG_DST_50_ÖVRIGT_1_1')); 

Вам все равно нужно использовать правильную кодировку для строки! Ö в ISO-8859-1 будет кодироваться URL в %D6 , тогда как в UTF-8 он будет закодирован до %C3%96 . Какой из них правильный, зависит от того, что ожидает сервер.

Нужно, чтобы процент кодировал символы Юникода. Это один из способов, которым я знаю это.

 $url2 = "https://se.timeedit.net/web/liu/db1/schema/s/s.html?tab=3&object=" . urlencode('CM_949A11_1534_1603_DAG_DST_50_ÖVRIGT_1_1') . "&type=subgroup&startdate=20150101&enddate=20300501"; echo "encoded: " . $url2; print file_get_contents($url2);