0

细绳

"<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

4 回答 4

3

str_replace作用于子串的所有出现,而不仅仅是第一个。您将需要使用不同的功能。

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

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

另请参阅:使用 str_replace 使其仅对第一个匹配项起作用?

于 2013-07-24T17:06:03.890 回答
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站点

于 2013-07-24T17:15:12.023 回答
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

希望这可以帮助!

于 2013-07-24T17:09:04.380 回答
0

尝试使用this answer的方法。

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

或者阅读正则表达式

于 2013-07-24T17:05:56.097 回答