使用PHP在HTML之间查找短语/单词

使用PHP在HTML之间查找短语/单词,php,Php,我想知道一种查找HTML文档中的短语/单词的可靠方法。例如,如果我有以下文档: <a href="#">This is a test</a><b>Another test</b> 另一个测试 我的目标是找到“这是一个测试”和“另一个测试”,并用其他的东西代替它。请注意,这些是示例短语,可能包含数字或符号 任何帮助都会很好 谢谢您可以使用php的strip\u标记($string,$tagsToRemove) 将HTML视为XML,并使用(PHP

我想知道一种查找HTML文档中的短语/单词的可靠方法。例如,如果我有以下文档:

<a href="#">This is a test</a><b>Another test</b>
另一个测试
我的目标是找到“这是一个测试”和“另一个测试”,并用其他的东西代替它。请注意,这些是示例短语,可能包含数字或符号

任何帮助都会很好


谢谢

您可以使用php的
strip\u标记($string,$tagsToRemove)


将HTML视为XML,并使用(PHP5)或(PHP4)扩展(或PHP中包含的任何其他XML扩展)


对于每个节点,您都可以使用
DomNode.GetValue
(取决于您使用的库)获取内部文本。

我将研究类似的内容说明如何删除所有html内容(html标记、脚本、css)然后使用str_replace,你可以替换你想要的任何东西。

如果这是客户端的一个选项,我建议这里的关键是使用正则表达式,从某种意义上说,解析HTML

所以你会使用:

<?php

$str = "<a href =\"\">Hello</a>"; //The string to search

preg_match('/(<.+>)??.+(<\/.+>)??/i',$str,$match); //Find all occurences and store the tag content in an array called $match

echo $match[0]; //Echo the first value

?>

这基本上是搜索输入字符串(您将其设置为页面的HTML),并将标记之间的每个文本匹配作为数组中的值返回。对于第一个标记,值将存储在$match[0]中,第二个存储在$match[1]中,以此类推

它首先查找一个模式,该模式以HTML标记开始,以HTML标记结束,但不选择任何一个标记,只选择中间的内容

希望这有帮助


Braeden

我想他是想用Phill Pafford替换文本而不是剥去标签+1,使用剥去标签后,可能很难解开标签,因为纯文本中的一些字符可能会变成“”符号。剥去标签不会让
字符神奇地出现,你知道。但是去掉标签会使替换文本更容易,因为他会有字符串,他可以使用
str\u replace
来替换……问题是我需要HTML标签。目标是用一个Smarty标记替换HTML模板中的所有短语,该标记将为语言包创建短语,因此我只是尝试查找所有HTML之间混合的短语,并用一个Smarty标记替换它,该标记将如下所示:{phrase var='name_of_phrase'}。希望这能有所帮助。解析HTML的关键实际上不是使用正则表达式,而是使用适当的HTML/XML解析器。但如果他只是获取标记内容,那么当你可以只使用一个简单的正则表达式时,为什么还要加载解析器呢?因为它不是一个简单的正则表达式。尝试为他的示例找到一个可用的,然后为“”找到一个。我强烈反对正则表达式。如果有呢?”
$html = '<a href="#">This is a test</a><b>Another test</b>';
$anchorText = strip_tags($html, '<a>');
$paraText = strip_tags($html, '<p>');
$html = str_replace("new anchor text", $anchorText);
$html = str_replace("new paragraph text", $paraText);
<?php

$str = "<a href =\"\">Hello</a>"; //The string to search

preg_match('/(<.+>)??.+(<\/.+>)??/i',$str,$match); //Find all occurences and store the tag content in an array called $match

echo $match[0]; //Echo the first value

?>