从字符串中删除第一个段落标记

时间:2013-07-24 16:59:17

标签: php html string

字符串

"<p>This is </p><p>Stackoverflow</p><p>site for programmers</p>"

必需的输出

"This is <p>Stackoverflow</p><p>site for programmers</p>"

小功能

function remove_p($string)
{
$first_p=substr($string,0,3);
$p="<p>";
if($first_p==$p)
{
$string=str_replace('<p>','',$string,$temp=1);
$string=str_replace('</p>','',$string,$temp=1);

}
return $string;
}

但它删除了所有<p> </p>标签。为什么? 我基本上写这个是为了删除ckeditor创建的第一个段落标记。

4 个答案:

答案 0 :(得分:3)

str_replace对所有出现的子字符串起作用,而不仅仅是第一个。您将需要使用其他功能。

$string = preg_replace('~<p>(.*?)</p>~is', '$1', $string, /* limit */ 1);

要仅删除字符串开头的第一个<p></p>,请在第一个^之后添加/

另请参阅:Using str_replace so that it only acts on the first match?

答案 1 :(得分:1)

function replaceFirst($input, $search, $replacement){
    $pos = stripos($input, $search);
    if($pos === false){
        return $input;
    }
    else{
        $result = substr_replace($input, $replacement, $pos, strlen($search));
        return $result;
    }
}

$string = "This is <p>Stackoverflow</p><p>site for programmers</p>";
echo $string;
echo replaceFirst($string, '<p>', '');

输出:

This is <p>Stackoverflow</p><p>site for programmers</p>
This is Stackoverflow</p><p>site for programmers</p>

来源:#2031045

希望这有帮助!

答案 2 :(得分:1)

$str = "This is <p>Stackoverflow</p><p>site for programmers</p>";

function remove_p($string)
{
    $string=str_replace('<p>','',$string,$temp=1);
    $string=str_replace('<\p>','',$string,$temp=1);
    return $string;
}

echo(remove_p($str));

结果是:
    这是Stackoverflow
    程序员网站

答案 3 :(得分:0)

尝试使用this answer的方法。

function remove_p($string)
{
  return replaceFirst(replaceFirst($string, '<p>', ''), '</p>', '');
}

或阅读Regular Expressions