Я извлекаю некоторый текст из HTML, который передается в виде строки. Формат извлеченного текста странный. Это должно быть на арабском языке, но показывает странные символы при извлечении. Я прокомментировал код, чтобы его было легко понять. В целом, что делает код, чтобы выяснить набор символов HTML, например: (utf, windows-1256), затем загрузите документ подходящим способом. Используйте разбор html-узлов, чтобы найти необходимые html-элементы в цикле и извлечь необходимый текст каждого из них.
Проблема в том, что два утверждения в операторах if работают
$html = @iconv('windows-1256', 'windows-1256', $html);
@$doc->loadHTMl($this->metaUtf8. $html);
И следующее высказывание после того, что закомментировано, показывает бессмысленный текст, который не должен быть таким и должен работать без двух приведенных выше высказываний. Так в чем может быть причина?
//@$doc->loadHTMl($this->metaWindows1256. $html);
Код:
//strings declared that will appended to html when loading the doc
public $metaWindows1256 = '<meta http-equiv="Content-Type" content="text/html; charset=windows-1256"/>' ;
public $metaUtf8 = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>' ;
//extract characterset of html passed in variable $html
preg_match( '@<meta\s+http-equiv="Content-Type"\s+content="([\w/]+)(;\s+charset=([^\s"]+))?@i', $html, $matches );
if ( isset( $matches[3] ) )
{
$charset = $matches[3];
}
$doc = new DOMDocument();
if(!($charset=='UTF-8') && !($charset=='utf-8'))
{
$html = @iconv('windows-1256', 'windows-1256', $html);
@$doc->loadHTMl($this->metaUtf8. $html);
//@$doc->loadHTMl($this->metaWindows1256. $html);
}
else
{
echo 'LOADING UTF';
@$doc->loadHTMl($this->metaUtf8. $html);
}
foreach($doc->getElementsByTagName($element_tagname) as $element)
{
if (substr_count($element->getAttribute($attribute),$value)!=0) //if the title of the div contains 'post_message'
{
$found_element[]= $element->getAttribute('href');
$found_element[]= $element->nodeValue;
$found_elements[] = $found_element;
unset($found_element);
}
}`