gpt4 book ai didi

php - 在 PHP 中使用 HTML 解码(智能解码方式)

转载 作者:搜寻专家 更新时间:2023-10-31 20:55:11 25 4
gpt4 key购买 nike

我正在从 PHP 脚本下载 RSS 提要,例如:

$fp = fopen('http://news.google.es/news?cf=all&ned=es_ve&hl=es&output=rss','r') 
or die('Error reading RSS data.');

提要是西类牙新闻提要,在我下载文件后,我将所有信息解析为一个只有标签内容的变量 <description>每个 <item> .好吧,问题是当我回显 var 时,所有信息都有一个 html 编码,例如:

echo($result);//this print: el ministerio pãºblico investigarã¡ la publicaciã³n en la primera pã¡gina

好吧,我可以创建一个巨大的案例实例来搜索每个字符,然后将其更改为对应的字符,例如:ã¡Á 等等,但是没有办法用一个函数做到这一点???甚至更好的是,没有办法在没有 html 编码的情况下将内容下载到 $fp?谢谢!

实际代码:

<?php
$acumula="";
$insideitem = false;
$tag = '';
$title = '';
$description = '';
$link = '';

function startElement($parser, $name, $attrs) {
global $insideitem, $tag, $title, $description, $link;
if ($insideitem) {
$tag = $name;
} elseif ($name == 'ITEM') {
$insideitem = true;
}
}




function endElement($parser, $name) {
global $insideitem, $tag, $title, $description, $link, $acumula;
if ($name == 'ITEM') {
$acumula = $acumula . (trim($title)) . "<br>" . (trim($description));
$title = '';
$description = '';
$link = '';
$insideitem = false;
}
}

function characterData($parser, $data) {
global $insideitem, $tag, $title, $description, $link;
if ($insideitem) {
switch ($tag) {
case 'TITLE':
$title .= $data;
break;
case 'DESCRIPTION':
$description .= $data;
break;
case 'LINK':
$link .= $data;
break;
}
}
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, 'startElement', 'endElement');
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen('http://news.google.es/news?cf=all&ned=es_ve&hl=es&output=rss','r')
or die('Error reading RSS data.');
while ($data = fread($fp, 4096)) {
xml_parse($xml_parser, $data, feof($fp))
or die(sprintf('XML error: %s at line %d',
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
//echo $acumula;
fclose($fp);
xml_parser_free($xml_parser);
echo($acumula); // THIS IS $RESULT!
?>

最佳答案

编辑

由于您已经在使用 XML 解析器,因此可以保证编码为 UTF-8。

如果您的页面是用 ISO-8859-1 编码的,甚至是 ASCII,您可以这样做来转换:

$result = mb_convert_encoding($result, "HTML-ENTITIES", "UTF-8");

使用为您处理此问题的库,例如DOM extension或简单 XML。示例:

$d = new DOMDocument();
$d->load('http://news.google.es/news?cf=all&ned=es_ve&hl=es&output=rss');
//now all the data you get will be encoded in UTF-8

示例 SimpleXML :

$url = 'http://news.google.es/news?cf=all&ned=es_ve&hl=es&output=rss';
if ($sxml = simplexml_load_file($url)) {
echo htmlspecialchars($sxml->channel->title); //UTF-8
}

关于php - 在 PHP 中使用 HTML 解码(智能解码方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3487673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com