首页 > 解决方案 > 正则表达式删除完整的 HTML 实体

问题描述

我们需要从文本字符串中删除特殊字符。例如,我们可能会得到一个看起来像这样的字符串;是®注册商标符号:

PEPSI&#174; Bottle 20 oz<br><br>

我不擅长正则表达式,不知道如何编辑现有代码来生成它。

这是我们目前拥有的:

$ui = "PEPSI Bottle 20 oz<br><br>";
$ui = preg_replace('/[^A-Za-z0-9\.\' -]/', '', $ui);

这导致PEPSI174 Bottle 20 ozbrbr.

我们想要的结果是PEPSI Bottle 20 oz<br><br>

如何编辑正则表达式以确保

  1. 它不会删除有效的 HTML 标签,如<br>, 和
  2. 如果它确实找到了一个特殊字符实体,它不仅会删除特殊字符(& 和#),还会删除数字和分号?

我们不想让它删除所有的数字,因为显然字符串可以包含数字;只有数字是我们需要删除的实体代码的一部分。

标签: phpregex

解决方案


您可以使用它,但现在我不能保证它涵盖所有可能的 HTML 实体:

$res = preg_replace('/&[A-Za-z0-9#]+;/', '', $ui);

这表示替换任何子字符串: - 以 - 开头,& 后跟任意数量的字母数字字符或#以随机顺序 - 后跟;.


推荐阅读