如何在PHP中删除一个字符串的一个实例?

时间:2010-03-25 08:36:13

标签: php

我在cms上有一个开源编辑器,它自动插入

<br />

标记在它提交到数据库的帖子的开头。这使得验证变得很麻烦,因为即使没有提交真实文本,表单仍然接受break标记作为输入,并防止显示“请输入一些文本”错误。

所以我尝试通过过滤我的输入来删除开始中断标记:

substr($_POST['content'], 6);

只要用户没有按下退格键几次就会删除break标记,这样就可以了。在这种情况下,即使帖子的前8个字符不是中断标记,它也会被删除。

那么,如果前6个字符由break标记组成,那么如何才能删除输入的前6个字符。另外,我不想删除所有中断标记,只删除帖子开头的那个。

6 个答案:

答案 0 :(得分:4)

表现和冗长:

if (substr($_POST['content'], 0, 6) == '<br />') {
    $_POST['content'] = substr($_POST['content'], 6);
}

不是那么冗长,但有点慢:

$_POST['content'] = preg_replace('#^<br />#', '', $_POST['content']);

答案 1 :(得分:3)

$content = $_POST['content'];
if ( substr($content, 0, 6) == '<br />' )
    $content = substr($content, 6);

答案 2 :(得分:3)

为您的开源编辑器创建解决方法并不是您应该寻求的解决方案。修改编辑器是不是更明智,所以它不会在那里插入<br />,所以你根本不必担心它?

答案 3 :(得分:2)

你可以使用例如。 preg_replace函数:

$text = preg_replace('#^<br />#', '', $text);

如果您不想使用regexp,可以在删除之前检查substr:

if (substr($text, 0, 6) == '<br />')
    $text = substr($text, 6);

答案 4 :(得分:1)

我认为这是一个更好的解决方案,用于测试用户是否确实输入了某些内容:

if (!strlen(trim(strip_tags($_POST['content'])))) {
    // no content
}
else {
    // some content
}

这基本上测试输入中是否还有HTML标签。

答案 5 :(得分:0)

首先用ltrim删除开头的空格,然后测试是否有br。如果有br删除它并执行另一个ltrim以删除br之后的空白。

$str = ltrim($_POST['content']);
if (substr($str, 0, 6) == '<br />'){
   $str = ltrim(substr($str, 6)); 
}

if ($str){
    //some content
} else {
    //no content
}

通过这种方式,您可以忽略br。之前和之后的空格和新行。