删除字符串中链接中的字符

时间:2014-11-10 05:44:37

标签: php string preg-match str-replace

我的字符串: 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?

由于

3 个答案:

答案 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函数做了几次建议的部分,但只使用它在链接标记内找到的部分。

Here is a working demo

答案 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>

参考:http://php.net/manual/en/function.strip-tags.php