Zo, kom ik ook eens bij de buren 
met een functie die ik van php.net geplukt heb haal ik de contents van een url binnen:
(zie http://nl2.php.net/manual/nl/function.file.php)
dit gaat allemaal redelijk ok (niet helemaal, maar dat fix ik wel en heeft ook weinig met het probleem te maken), alleen gaat er iets helemaal mis met de character encoding
als ik een UTF-8 gecodeerde file ophaal (bv http://www.google.com.ua waar je mooi cyrillisch verwacht) en deze direct weer output (de pagina wordt geserveerd als UTF-8 ook), dan kloppen de tekens toch echt niet.
Nu heb ik wel een functietje gevonden die checked of een string UTF-8 is (http://nl3.php.net/manual/nl/function.utf8-encode.php, bovenste commentaar):
maar ten eerste heb ik geen idee of deze functie naar behoren werkt en ten tweede wordt bv die google pagina al geserveerd als UTF-8, dus ik zou die functie helemaal al niet nodig hebben.
Hoe zorg ik nu voor dat de content van die pagina wél correct gepresenteert wordt?
met een functie die ik van php.net geplukt heb haal ik de contents van een url binnen:
(zie http://nl2.php.net/manual/nl/function.file.php)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| function fetchUrlWithoutHanging($url) { $numberOfSeconds=4; error_reporting(0); $url = str_replace("http://","",$url); $urlComponents = explode("/",$url); $domain = $urlComponents[0]; $resourcePath = str_replace($domain,"",$url); $socketConnection = fsockopen($domain, 80, $errno, $errstr, $numberOfSeconds); if (!$socketConnection) { return(false); } else { $xml = ''; fputs($socketConnection, "GET /$resourcePath HTTP/1.0\r\nHost: $domain\r\n\r\n"); while (!feof($socketConnection)) { $xml .= fgets($socketConnection, 128); } fclose ($socketConnection); } return($xml); } |
dit gaat allemaal redelijk ok (niet helemaal, maar dat fix ik wel en heeft ook weinig met het probleem te maken), alleen gaat er iets helemaal mis met de character encoding
als ik een UTF-8 gecodeerde file ophaal (bv http://www.google.com.ua waar je mooi cyrillisch verwacht) en deze direct weer output (de pagina wordt geserveerd als UTF-8 ook), dan kloppen de tekens toch echt niet.
Nu heb ik wel een functietje gevonden die checked of een string UTF-8 is (http://nl3.php.net/manual/nl/function.utf8-encode.php, bovenste commentaar):
PHP:
1
2
3
| function isUTF8($string) { return (preg_match('/^([\x00-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xec][\x80-\xbf]{2}|\xed[\x80-\x9f][\x80-\xbf]|[\xee-\xef][\x80-\xbf]{2}|f0[\x90-\xbf][\x80-\xbf]{2}|[\xf1-\xf3][\x80-\xbf]{3}|\xf4[\x80-\x8f][\x80-\xbf]{2})*$/', $string) === 1); } |
maar ten eerste heb ik geen idee of deze functie naar behoren werkt en ten tweede wordt bv die google pagina al geserveerd als UTF-8, dus ik zou die functie helemaal al niet nodig hebben.
Hoe zorg ik nu voor dat de content van die pagina wél correct gepresenteert wordt?