【发布时间】:2017-04-03 17:15:07
【问题描述】:
我在 PHP 中遇到了 preg_replace() 的问题。
我从数据库中获取了一些未转义的 HTML 字符串,并使用 htmlentities() 转义了所有特殊字符。它工作得很好,但它也替换了< 和>symbols,所以我使用str_replace() 并替换了所有< 和>,所以这些标签被排除在替换之外。我使用的所有标签都是封闭的,但我使用了一些以< 和> 符号开头的内容,例如字符串<nome programma> 被视为标签。
所以我决定使用 preg_replace() 和这个正则表达式 <(\w+)>(.*)<\/(\w+)>
我必须转义那些字符串:
<sub>string</sub><code>start "<nome programma>":</code>Il tipo <code>string</code> e il tipo <code>char</code>
这对前两种情况很有效,但对最后一种情况不太适用。
我写了一个例子here。
有人可以帮我弄清楚吗?
【问题讨论】:
-
我认为您正在寻找
htmlspecialchars或htmlentities和html_entity_decode[原文如此]。不要为此使用正则表达式! -
htmlspecialchars()太还原了...htmlentities()替换了所有内容,所以我不得不使用正则表达式。 -
我明白了。所以你得到了无效的 HTML,其内容看起来像标签(甚至可能是或成为标签),你正在尝试使用正则表达式来纠正它。顺便说一下,这些字符串是你从数据库中获得的那些吗?他们似乎已经逃脱了。
标签: php html regex special-characters