Я изучаю PHP-программирование, и я тестирую некоторые вещи.Кодировки символов и file_get_contents
Я пытался загрузить некоторые HTML данные с:
$this->html = file_get_contents($this->url);
$fh = fopen('txt\htm.txt', 'w') or die("can't open file");
fwrite($fh, $this->html);
fclose($fh);
Как только я запускаю этот скрипт, он загружает HTML со страницы и сохраняет его в текстовый файл; здесь все работает нормально.
Внутри файла HTML есть некоторые данные, которые я хочу извлечь и сохранить в памяти.
Пример:
- "автомобиль"
- "банан"
- "tâllian" < -
- "собака"
код, который я использую: (Я используя XPath)
$doc = new DOMDocument;
@$doc->loadHTML($this->html);
$xpath = new DOMXpath($doc);
$this->string1 = $this->GetName('//div/div[2]/table/tbody/tr[1]/td[1]/a/span',$xpath);
$this->string2 = $this->GetName('//div/div[2]/table/tbody/tr[2]/td[1]/a/span',$xpath);
$this->string3 = $this->GetName('//div/div[2]/table/tbody/tr[3]/td[1]/a/span',$xpath);
$this->string4 = $this->GetName('//div/div[2]/table/tbody/tr[4]/td[1]/a/span',$xpath);
private function GetName($xquery,$xpath)
{
$result_rows = $xpath->query($xquery);
foreach ($result_rows as $result_object)
{
return substr($result_object->nodeValue, strpos($result_object->nodeValue, '>')+1,strlen($result_object->nodeValue));
}
}
И если я печатаю:
echo 'tâllian<br>';
echo $this->string1.'<br>';
echo $this->string2.'<br>';
echo $this->string3.'<br>'; //tâllian
echo $this->string4.'<br>';
Результат:
- tâllian < -
- автомобиль
- банан
- tà ¢ llian < -
- собака
Итак, моя проблема в том, почему сценарий возвращает «tà ¢ llian» вместо «tâllian»?
Я ожидаю, что эти проблемы вызваны моей функцией GetName
... Как вы думаете?
Интересные факты
- Когда я ищу слово "tâllian" в моем текстовом файле (".txt \ htm.txt"), я считаю чистым и ясным.
- Когда я исполняю
echo 'tâllian';
возвращает его чистым и ясным, потому что у меня этот заголовок:header('Content-Type: text/html; charset=utf-8');
найдено решение:
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'utf-8');
$doc = new DOMDocument;
@$doc->loadHTML($html);
Это нужно, чтобы быть преобразованы, прежде чем создавать новый DOMDocument.
спасибо за исправление моей темы :), я одобряю его –
Да, извините, я отредактировал его 3 раза. Я тоже сделал некоторые опечатки: /. В любом случае, я попытался ответить на ваш вопрос. –
Как насчет информации о кодировании в самом документе HTML? Возможно, метатег, который указывает, что контент - это нечто иное, чем UTF-8 (например, ISO 8859-1)? Есть также некоторые другие люди, которые опубликовали комментарии в документации PHP относительно способов принудительной обработки UTF-8. http://us1.php.net/manual/en/domdocument.loadhtml.php#74777 –