我使用preg_replace
必须从 中清除所有rel
和target
属性$body
并用其他值替换它们的函数。这里是:
$patterns = array();
$patterns[] = '/<a(.*) rel="([^"]*)"(.*)>/';
$patterns[] = '/<a(.*) target="([^"]*)"(.*)>/';
$patterns[] = '/<a(.*)>/';
$replacements = array();
$replacements[] = '<a$1$3>';
$replacements[] = '<a$1$3>';
$replacements[] = '<a rel="nofollow" target="_blank"$1>';
$body = preg_replace($patterns,$replacements,$body);
问题是它不匹配单引号和无引号。另外,如果有任何更好的方法来清除链接中的rel
和target
属性并与其他人一起设置它们,请告知。
谢谢
编辑$body
::
$body = '<a href="TEST">Link1</a>
<a href="TEST" rel=\'lqlqlq\'>Link2</a>
<a href="TEST" target="_blank" rel="lqlqlq">Link3</a>
<a href="TEST" target=_blank rel=lqlqlq>Link4</a>';
而且由于文本,工作链接的所有其他选项都是用户定义的,可能有些用户会作弊。我的目标 -无论用户输入什么,所有链接$body
都必须具有定义rel
和属性。target