Я изучаю PHP-программирование, и я тестирую некоторые вещи.
Я пытаюсь загрузить некоторые данные 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 есть некоторые данные, которые я хочу извлечь и сохранить в памяти.
Пример:
Код, который я использую: (Я использую 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"?
Я ожидаю, что эти проблемы вызваны моей функцией GetName
... Как вы думаете?
Интересные факты
echo 'tâllian';
он возвращает его чистым и понятным, потому что у меня есть заголовок header: header('Content-Type: text/html; charset=utf-8');
найденное решение:
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'utf-8');
$doc = new DOMDocument;
@$doc->loadHTML($html);
Его необходимо преобразовать, прежде чем создавать новый DOMDocument.
найденное решение:
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'utf-8');
$doc = new DOMDocument;
@$doc->loadHTML($html);
Его необходимо преобразовать, прежде чем создавать новый DOMDocument.
Что произойдет, если вы используете htmlentities();
метод? Попробуйте следующий код:
echo htmlentities($this->string3) . "<br />";
Вероятно, это связано с тем, что эти специальные символы (в этом случае A с крышей) неправильно печатаются, когда вы печатаете их как обычный текст. Вы должны печатать их как объект HTML. Метод, использованный ниже, делает это автоматически.
Дополнительную информацию об этом методе можно найти на странице PHP: htmlentities