2010-03-25 37 views
0

我有,我做的是CMS中的开源编辑器会自动将它提交到数据库的文章的开头一个如何在PHP中删除一个字符串的一个实例?

<br /> 

标签。这使得验证成为一种痛苦,因为即使没有提交真实文本,表单仍然接受break标签作为输入并阻止显示“请输入一些文本”错误。

所以,我想通过我的过滤输入这样除去开盘破标签:

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

这个工作,只要用户不按退格几次从而消除了突破标签中哪种情况下帖子的前8个字符被删除,即使它们不是中断标签。

那么如何删除输入的前6个字符,只要这些前6个字符由中断标记组成。此外,我不想删除所有的中断标签,只是在帖子开头的那个。

+0

但是如果用户在br之前插入空格呢?可能吗?如果是,请参阅http://stackoverflow.com/questions/2514002/how-to-remove-one-instance-of-one-string-in-php/2514073#2514073 – 2010-03-25 09:02:21

回答

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

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

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

如果你不想使用正则表达式,你可以用SUBSTR检查移除之前,

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

难道你不能只使用'preg_match'和在'
'之后添加一个字符串结束符?像'preg_match('#^
$#')' – 2010-03-25 08:57:39

4

高性能和冗长:

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

没有这么详细,但稍慢:

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

哦,我在PHP中如何错过Python的'startswith()'方法! – Boldewyn 2010-03-25 08:41:04

+0

您从问题中复制了错位的右括号。 – poke 2010-03-25 08:41:58

+0

@Boldewyn:什么让你无法创建一个?我为我的个人项目做。 – 2010-03-25 08:43:40

3

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

+1

让我从我的经验告诉:这取决于。如果编辑有这个和只有这个怪癖,修复服务器端是a)更快实施和b)未来的证明。问题是,您必须将修复程序移植到编辑器中,以添加到您包含的每个新版本的编辑器中。然而,在上述情况下,从字符串开头剥离“
”是一种合理的卫生条件,而且在更新编辑器软件时不会有大惊小怪。 – Boldewyn 2010-03-25 08:44:14

1

这就是我认为是测试的更好的解决用户是否确实已经进入了一句:

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

这基本上测试,如果有比在输入HTML标签的任何其他。

+1

取决于用例,如果它是一个现实的场景,但如果内容只是一个图像,这种方法将失败。 – 2010-03-25 10:39:40

0

首先用ltrim删除开头的空格,然后测试是否有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之前和之后的空白处和新行。

相关问题