我的字符串:
some text some text < b >some text< /b > some text < a href = http ://sometextsometext< b >sometext< /b >sometextsometext >text< /a > some text some text
Is there any way using preg_match or str_replace to only remove the < b >< /b > in the link tag?
由于
答案 0 :(得分:1)
好的,这是使用PHP的函数preg_replace_callback
<?php
// SET TEXT TO BE USED
$string = 'some text some text <b>some text</b> some text <a href=http://sometextsometext<b>sometext</b>sometextsometext>text</a> some text some text. And We Have A <a href=http://google.com>Google</a> Link';
// USE A CALLBACK FUNTION TO SCAN THROUGH LINKS
$string = preg_replace_callback('~<a.*?</a>~', 'remove_crap_from_links', $string);
print $string;
// THIS IS THE CALLBACK FUNCTION ... EACH LINK IS STORED AS '$m'
function remove_crap_from_links($m) {
// PULL OUT THE PART OF THE LINK BEFORE THE CLOSING LINK BRACKET
// (USE A NEGATIVE LOOKAHEAD TO MAKE SURE THAT IT CAN'T HAVE ANY OPENING/CLOSING HTML BRACKETS IN THERE
if (preg_match('~<a(.*?)>(?:[^<>]*?)</a>~i', $m[0], $url_matches)) {
// RUN A PHP strip_tags FUNCTION TO PULL OUT ANY HTML TAGS FOUND IN THE LINK BODY
$stripped_url = strip_tags($url_matches[1]);
// REBUILD THE URL, USING THE $stripped_url IN PLACE OF WHAT WAS ALREADY THERE
$clean_url = preg_replace('~(<a)(.*?)(>(?:[^<>]*?)</a>)~', '$1'.$stripped_url.'$3', $m[0]);
}
return $clean_url;
}
所以基本上,我正在使用PHP的strip_tags
函数做了几次建议的部分,但只使用它在链接标记内找到的部分。
答案 1 :(得分:0)
你可以在php中使用strip_tags函数删除html标签。
$ text ='
测试段落。
其他文字'; echo strip_tags($ text);
输出:测试段落。其他文字
答案 2 :(得分:0)
strip_tags - 从字符串中删除HTML和PHP标记
PHP代码
<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";
// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>
以上示例将输出:
Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>