【问题标题】:Regex to replace < or > with &gt; or &lt; inside html tag正则表达式用 > 或 < 在 html 标记内替换 < 或 >
【发布时间】:2011-05-05 12:58:26
【问题描述】:

例如。

<html>
<head></head>
<body>
<div>
<h1>-----> hello! ----< </h1>
</div>
</body>

我想把h1标签里面的>和和

哪个是正确的模式?

提前致谢!

【问题讨论】:

  • 为什么会首先生成这个损坏的 HTML?
  • 对不起,我忘了最后一个

标签: php regex replace preg-replace str-replace


【解决方案1】:

你可以把它扔给tidy(见the docs),看看它是否能修复错误。比尝试使用正则表达式自己做“正确的事情”要好得多。

$html = <<<EOT
<html>
<head></head>
<body>
<div>
<h1>-----> hello! ----< </h1>
</div>
</body>
EOT;

$config = array ( 
  'clean'                       => true, 
  'drop-proprietary-attributes' => true, 
  'output-xhtml'                => false, 
  'show-body-only'              => false, 
  'wrap'                        => '0'
); 

$tidy = new tidy();
$tidy->parseString($html, $config, 'utf8');
$tidy->cleanRepair();

echo tidy_get_output($tidy);

可能是你必须先在你的 PHP 环境中启用 tidy。

【讨论】:

  • 可能我已经用 tidy 解决了。我已经在这个案例中使用了 tidy fot。但也许我在做一些指令之前会使 tidy 功能失效。
【解决方案2】:

我会通过tidy 传递它。

【讨论】:

  • 我在写这篇文章之前尝试了控制台整洁,它完全符合你的要求。
【解决方案3】:

同意评论者“为什么首先会生成这个损坏的 HTML?”,如果您表示这样的文档,那么您将遇到当前遇到的这些问题。有两种有效情况

  • 您有一些数据(不是 HTML 转义的),例如PHP中的一堆字符串
  • 您有一个 HTML 文档,其中包含 HTML 转义的标签和文本

因此,当您从源数据(字符串、数据库)生成 HTML 文档时,您需要对它们进行转义(例如,正如另一个回答者正确指出的那样,使用 htmlspecialchars。)

您需要不惜一切代价避免出现这样的情况,即您有一个字符串,其中包含 HTML 标记和非转义文本。

例如,如果您的文本包含文本 &lt;b&gt;text&lt;/b&gt; 并且您确实希望该文本显示在 HTML 文档中,即您希望看到尖括号而不是文本以粗体显示(例如,您正在写一个关于如何编写 HTML 的文档),那么一旦你有了这样的文档,你就无法将它与实际的 HTML 代码区分开来。

【讨论】:

  • 我无法控制 html。来自我无法控制的网站。我必须将 html 标签内的内容与 xpath 匹配,如果我在标签内找到 ,xpath 查询就会停止。我希望我解释得更好:)
  • 你必须去找控制 HTML 的人,告诉他们这种情况是不可接受的。我知道这听起来不是一个好的答案,但他们正在向您发送无效和模棱两可的数据。就像我说的,如果数据实际上包含文本 &lt;b&gt; 并且您想要显示它,您将无法将其与实际的粗体标签区分开来。因此,不可能有解决办法。您需要向他们解释这一点,也许指向这个 SO question。出于同样的原因,您将尝试和使用的任何工具(如 XPath)也将不起作用。
  • 谢谢,但我不知道谁给了我 HTML。无论如何,也许我已经使用 Tidy 功能解决了它。谢谢
猜你喜欢
  • 2012-04-04
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2019-10-16
  • 1970-01-01
  • 2016-04-06
相关资源
最近更新 更多