【发布时间】:2019-11-13 11:18:36
【问题描述】:
我想替换包含 HTML 字符的文本字符串中的某个单词。所以这就是这个词变成了一个链接。
所以,例如当我得到这个字符串时
Text I get: Lorem ipsum dolor sit amet
我希望它是这样的
Result: Lorem <a href="url">ipsum</a> dolor sit amet
我已经在最后用函数存档了。
但如果我得到的字符串已经有链接
Text I get: Lorem <a href="url">ipsum</a> dolor sit amet
变成这样
Result: Lorem <a href="url"></a> <a href="url">ipsum</a> dolor sit amet
我的函数看起来像这样。
function replaceStrings($string) {
$arrCounter = 0;
$arrString = array();
if( have_rows('options_links_repeater', 'option') ):
while( have_rows('options_links_repeater', 'option') ): the_row();
$replacetext = get_sub_field('options_links_repeater_text', 'option');
$replacelink = get_sub_field('options_links_repeater_links', 'option');
$arrString[$arrCounter]["text"] = $replacetext;
$arrString[$arrCounter]["link"] = $replacelink;
$arrCounter++;
endwhile;
endif;
$length = count($arrString);
for ($i = 0; $i < $length; $i++) {
$searchString = $arrString[$i]["text"];
$url = $arrString[$i]["link"];
$urlLink = $arrString[$i]["link"]['url'];
$urlLinkText = $arrString[$i]["link"]['title'];
$urlLinkTarget = $arrString[$i]["link"]['target'] ? $arrString[$i]["link"]['target'] : '_self';
$string = preg_replace('/'.$searchString.'\b/', '<a href="'.$urlLink.'" target="'.$urlLinkTarget.'">'.$searchString.'</a>', $string);
}
echo $string;
}
我认为现在唯一重要的部分是 preg_replace。
你能帮我解决这个问题吗?所以如果这个词已经是一个链接,那么这个词就不会被替换。
编辑: 感谢您提供链接 @bobble-bubble。该线程中接受的答案对我有帮助:preg_replace to exclude <a href='''></a> PHP
这个 preg_replace 现在对我有用
$string = preg_replace("~<a[^>]*>.*?</a\s*>(*SKIP)(*FAIL)|\b".$searchString."\b~", '<a href="'.$urlLink.'" target="'.$urlLinkTarget.'">'.$searchString.'</a>', $string);
【问题讨论】: