2015-08-20 3 views
2

Во-первых, я знаю, что эта проблема была сигнализировал раньше, но решения не применяются в моем случаеForce DOMXPath - PHP - вернуть UTF-8 результатов

Вот URL-адрес http://www.astagiudiziaria.com/beni/porzione_di_rustico_e_terreni_agricoli/index.html

На странице говорит, что его кодировка - ISO-8859-1, но это не может быть, так как на нем есть знак ЕВРО. Chrome браузер идентифицирует его как Windows-1252

я использовал

$file = str_replace('charset=iso-8859-1', 'charset=utf-8', $file); 
$file = iconv('windows-1252', 'UTF-8', $file); 

и сохранить его и мой текстовый редактор говорит, что это UTF-8 кодируются

Затем я использую

$doc2->loadHTML($file); 
$doc2->saveHTMLFile('ggg.html'); 

и также мой текстовый редактор говорит, что кодируется UTF-8 Но http://i-tools.org/charset говорит, что этот файл, ggg.html - это фактически ASCII!

Тем не менее, внутри все выглядит так, как ожидалось, хотя они используют кодировки html, такие как Pr & eacute; или запатентовать;

Запросы XPath возвращают данные мусора, как вместо Пры является PRA © вместо € является, ¬ Â

Я попытался решение предложило здесь без какого-либо успеха я думаю, что это о том, как PHP имеет дело с libxml, так как в ruby ​​он работает безупречно - также используя libxml через curb gem - проблема в том, что мой клиент хочет сценарий php

+0

'Запросы xpath возвращают данные мусора, а вместо Pré - Prà © вместо € is â'¬Â' - где вы видите это? В веб-браузере? Вы «сообщили» браузеру, что ваш документ - ваш код utf-8? – VolkerK

+0

Нет в браузере. Данные предназначены для сохранения в базе данных. Я просто print_r массив с результатами в файл. Мой текстовый редактор говорит, что этот файл дампа - ASCII, а не UTF-8, как я ожидал. – alupu

+0

, если кто-нибудь может что-то сделать из этого http://www.xmlsoft.org/encoding.html – alupu

ответ

0

Я быстро взглянул, и, как я вижу, сайт выводит смешанную кодировку.

Это iso-8859-1 со смешанным помещением windows-1252 знак (я думаю). Вот почему браузер путается (но как-то его обрабатывает).

Не знаю, как вы будете продолжать здесь, кроме того, чтобы просить их исправить их сайт или альтернативно делать некоторые бит-возиться.

Pré is Pré перерывы, потому что вы attemt к windows-1252->utf8 перекодируете, что на самом деле iso-8859-1 вещи (я полагаю).

+0

Я сделал много и куча всего. В некоторых случаях я получил правильный Pré, все еще были другие проблемы, как вы можете видеть в файле dropbox. Мне нужно решение, где все так и должно быть, так как мой рубиновый скрипт демонстрирует, что это возможно - и, в рубине, очень просто – alupu

+0

вот файл ggg.html https://www.dropbox.com/s/k1kdnw16h1kor45/ ggg.html? dl = 0 это то, как libxml внутренне разбирал DOM. Он выглядит хорошо! но это ASCII, а не UTF-8, и в этой связи проблема Xpath возвращает текстовые данные, а не HTML, поэтому ASCII не может представлять его. Как заставить документ обрабатывать документ внутри UTF-8, так как он составляет 99% времени ?Почему в этом случае он не обрабатывает документ как UTF-8? – alupu

+0

Файл ggg.html - это ASCII с htmlentites; 'Xpath возвращает текстовые данные, а не HTML,' что? - Он не может рассматривать его как utf-8, потому что источник имеет смешанную кодировку, вы не можете рассматривать его как что-либо, кроме разбитого. (если мой ответ не прав) – birdspider