如何解析HTML/XML并从中提取信息?
我正在努力做的是做一个'行话破坏者'.基本上我在数据库中有一些html和一些词汇表术语.当人们点击行话破坏者时,它会用一个漂亮的工具提示(wztooltip)替换文本中的单词,这些工具提示显示了它们的含义.
我一直在努力研究这个问题并且一直在认真研究这个问题 Regex/DOMDocument - 匹配并替换不在链接中的文本
似乎答案在于simple_html_dom库,但是我无法让它工作.显然,任何已经链接的单词都不会被触及.这是我所得到的内容.
$html = str_get_html($article['content']);
$query_glossary = "SELECT word,glossary_term_id,info FROM glossary_terms WHERE status = 1 ORDER BY LENGTH(word) DESC";
$result_glossary = mysql_query_run($query_glossary);
while($glossary = mysql_fetch_array($result_glossary)) {
$glossary_link = SITEURL.'/glossary/term/'.string_to_url($glossary['word']).'-'.$glossary['glossary_term_id'];
if(strlen($glossary['info'])>400) {
$glossary_info = substr(strip_tags($glossary['info']),0,350).' ...<br /> <a href="'.$glossary_link.'">Read More</a>';
}
else {
$glossary_info = $glossary['info'];
}
$glossary_tip = 'href="javascript:;" onmouseout="UnTip();" class="article_jargon_highligher" onmouseover="'.tooltip_javascript('<a href="'.$glossary_link.'">'.$glossary['word'].'</a>',$glossary_info,400,1,0,1).'"';
$glossary_word = $glossary['word'];
$glossary_word = preg_quote($glossary_word,'/');
//once done we can replace the words with a nice tip
foreach ($html->find('text') as $element) {
if …Run Code Online (Sandbox Code Playgroud) $string = file_get_contents('http://example.com');
if ('UTF-8' === mb_detect_encoding($string)) {
$dom = new DOMDocument();
// hack to preserve UTF-8 characters
$dom->loadHTML('<?xml encoding="UTF-8">' . $string);
$dom->preserveWhiteSpace = false;
$dom->encoding = 'UTF-8';
$body = $dom->getElementsByTagName('body');
echo htmlspecialchars($body->item(0)->nodeValue);
}
Run Code Online (Sandbox Code Playgroud)
这会将所有UTF-8字符更改为Å,¾,¤和其他垃圾.有没有其他方法如何保存UTF-8字符?
不要发布答案告诉我确保我输出它作为UTF-8,我确定我是.
提前致谢 :)
我需要你帮忙.
我想转此:
sometext sometext http://www.somedomain.com/index.html sometext sometext
Run Code Online (Sandbox Code Playgroud)
成:
sometext sometext <a href="http://somedoamai.com/index.html">www.somedomain.com/index.html</a> sometext sometext
Run Code Online (Sandbox Code Playgroud)
我使用这个正则表达式管理它:
preg_replace("#((http|https|ftp)://(\S*?\.\S*?))(\s|\;|\)|\]|\[|\{|\}|,|\"|'|:|\<|$|\.\s)#ie", "'<a href=\"$1\" target=\"_blank\">$1</a>$4'", $text);
Run Code Online (Sandbox Code Playgroud)
问题是它还替换了imgURL,例如:
sometext sometext <img src="http//domain.com/image.jpg"> sometext sometext
Run Code Online (Sandbox Code Playgroud)
变成了:
sometext sometext <img src="<a href="http//domain.com/image.jpg">domain.com/image.jpg</a>"> sometext sometext
Run Code Online (Sandbox Code Playgroud)
请帮忙.
我需要将XML文档加载到来自外部源的PHP中.XML没有声明它的编码并包含非法字符&.如果我尝试直接在浏览器中加载XML文档,我会收到类似"在文本内容中找到无效字符"的错误,当在PHP中加载文件时,我会收到很多警告,例如:xmlParseEntityRef: no name in Entity和Input is not proper UTF-8, indicate encoding ! Bytes: 0x9C 0x31 0x21 0x3C.
很明显,XML格式不正确,并且包含应转换为XML实体的非法字符.
这是因为XML提要由许多其他用户提供的数据组成,显然它在我获得之前没有经过验证或重新格式化.
我已经与XML feed的供应商交谈了,他们说他们正试图让内容提供商对其进行排序,但这看起来很愚蠢,因为他们应该首先验证输入.
我基本上需要修复XML纠正任何编码错误并将任何非法字符转换为XML实体,以便在使用PHP的DOMDocument函数时XML加载问题.
我的代码目前看起来像:
$feedURL = '3704017_14022010_050004.xml';
$dom = new DOMDocument();
$dom->load($feedURL);
Run Code Online (Sandbox Code Playgroud)
示例编码问题的XML文件示例(单击下载):feed.xml
包含尚未转换为XML实体的字符的示例XML:
<?xml version="1.0"?>
<feed>
<RECORD>
<ID>117387</ID>
<ADVERTISERNAME>Test</ADVERTISERNAME>
<AID>10544740</AID>
<NAME>This & This</NAME>
<DESCRIPTION>For one day only this is > than this.</DESCRIPTION>
</RECORD>
</feed>
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用simple_html_dom php类来创建查找和替换函数,该函数查找关键字并将其替换为关键字定义的链接,关键字为链接文本.
如何<a href="info.php?tag=dexia">Dexia</a> 使用这个类在一个字符串中找到并替换"Dexia" <div><p>The CEO of the Dexia bank has just decided to retire.</p></div> ?
应用突出显示某些文本(不包括偶尔标记“<...>”中的文本)的最简单方法是什么?
澄清:我希望保留现有标签!
$t =
preg_replace(
"/(markdown)/",
"<strong>$1</strong>",
"This is essentially plain text apart from a few html tags generated with some
simplified markdown rules: <a href=markdown.html>[see here]</a>");
Run Code Online (Sandbox Code Playgroud)
应该显示为:
“除了使用一些简化的Markdown规则生成的一些 html 标签之外,这本质上是纯文本:请参见此处”
...但不要弄乱锚标记内的文本(即<a href=markdown.html>)。
我听说过不使用正则表达式解析 html 的论点,但这里我们本质上讨论的是纯文本,除了一些 Markdown 代码的最小解析之外。
我使用curl以俄语填写utf-8页面.如果我回复文本它显示良好.然后我使用这样的代码
$dom = new domDocument;
/*** load the html into the object ***/
@$dom->loadHTML($html);
/*** discard white space ***/
$dom->preserveWhiteSpace = false;
/*** the table by its tag name ***/
$tables = $dom->getElementsByTagName('table');
/*** get all rows from the table ***/
$rows = $tables->item(0)->getElementsByTagName('tr');
/*** loop over the table rows ***/
for ($i = 0; $i <= 5; $i++)
{
/*** get each column by tag name ***/
$cols = $rows->item($i)->getElementsByTagName('td');
echo $cols->item(2)->nodeValue;
echo '<hr />';
}
Run Code Online (Sandbox Code Playgroud)
$ html包含俄语文本.在它行echo …
我正在使用这个简单的PHP HTML解析器:http://simplehtmldom.sourceforge.net.是否可以使用它来回显HTML规范的所有标记?
php ×9
dom ×3
html ×3
domdocument ×2
regex ×2
replace ×2
xml ×2
curl ×1
encoding ×1
html-parsing ×1
iconv ×1
javascript ×1
markdown ×1
markup ×1
parsing ×1
preg-replace ×1
url ×1
utf-8 ×1
xml-parsing ×1