我从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);
}
}`
答案 0 :(得分:0)
我发现我在代码的其他部分将html从windows1256转换为utf。现在,当我使用它的meta再次检查html的字符集时,它会说它是windows1256,尽管我已经将它转换为utf。所以后来我再次尝试将它再次转换为utf,以及那些奇怪的角色。
非常感谢