我正在对包含HTML字符串的变量执行str_replace。目的是将“data-rel =”external“target =”_ blank“”添加到所有a-href中。
$html = str_replace("<a href=", "<a data-rel=\"external\" target=\"_blank\" href=", $html);
它工作正常,但这是挑战:如果原始a-href是a-href =“mailto:[..],那么它应该添加”data-rel =“external”target =“_ system”“
示例:
<a href="http://apache.org">Link 1</a>
应该成为:
<a data-rel="external" target="_blank" href="http://apache.org">Link 1</a>
和
<a href="mailto:post@apache.org">Link 2</a>
应该成为:
<a data-rel="external" target="_system" href="mailto:post@apache.org">Link 2</a>
任何想法如何解决这个问题?
答案 0 :(得分:3)
首先运行mailto str_replace,
$html = str_replace("<a href=\"mailto:",
"<a data-rel=\"external\" target=\"_system\" href=\"mailto:", $html);
执行此操作后,这些将不再受str_replace查找<a href
的影响,因为它们将为<a data-rel
。
答案 1 :(得分:0)
我会测试"mailto:"
中子字符串$html
的外观,并根据是否为真运行不同的str_replace
命令。
答案 2 :(得分:0)
在其他无法使用str_replace的情况下,preg_replace可能会变得很方便:
preg_replace('/<a href="mailto/', '<a data-rel="external" target="_system" href="mailto', $html);
答案 3 :(得分:0)
这对我有用
<?php
$html='<a href="http://apache.org">Link 1</a><a href="mailto:post@apache.org">Link 2</a>';
$html = str_replace('<a href="mailto', '<a data-rel="external" target="_system" href="mailto', $html);
$html = str_replace('<a href=', '<a data-rel="external" target="_blank" href=', $html);
echo $html;
?>
或者
<?php
$html='<a href="http://apache.org">Link 1</a><a href="mailto:post@apache.org">Link 2</a>';
$html = str_replace(array('<a href="mailto','<a href='), array('<a data-rel="external" target="_system" href="mailto','<a data-rel="external" target="_blank" href='), $html);
echo $html;
?>
输出
<a data-rel="external" target="_blank" href="http://apache.org">Link 1</a>
<a data-rel="external" target="_system" href="mailto:post@apache.org">Link 2</a>