如何在PHP中删除一个字符串的一个实例?
我在cms上有一个开源编辑器,可以自动插入如何在PHP中删除一个字符串的一个实例?,php,Php,我在cms上有一个开源编辑器,可以自动插入 <br /> 只要用户不按backspace键几次就可以删除break标记,在这种情况下,即使post的前8个字符不是break标记,也会被删除 因此,只有在前6个字符由break标记组成的情况下,我如何删除输入的前6个字符呢。此外,我不想删除所有断开标记,只删除文章开头的一个。您可以使用例如preg\u replace: $text = preg_replace('#^<br />#', '', $text); $text
<br />
只要用户不按backspace键几次就可以删除break标记,在这种情况下,即使post的前8个字符不是break标记,也会被删除
因此,只有在前6个字符由break标记组成的情况下,我如何删除输入的前6个字符呢。此外,我不想删除所有断开标记,只删除文章开头的一个。您可以使用例如preg\u replace:
$text = preg_replace('#^<br />#', '', $text);
$text=preg#u replace(“#^
,”$text);
如果不想使用regexps,可以在删除之前先与substr进行检查:
if (substr($text, 0, 6) == '<br />')
$text = substr($text, 6);
if(substr($text,0,6)='
')
$text=substr($text,6);
性能和详细性:
if (substr($_POST['content'], 0, 6) == '<br />') {
$_POST['content'] = substr($_POST['content'], 6);
}
if(substr($\u POST['content'],0,6)='
'){
$_POST['content']=substr($_POST['content'],6);
}
不太冗长,但速度稍慢:
$_POST['content'] = preg_replace('#^<br />#', '', $_POST['content']);
$\u POST['content']=preg\u replace('.^
,'''.$\u POST['content']);
$content=$\u POST['content'];
如果(substr($content,0,6)='
')
$content=substr($content,6);
为您的开源编辑器创建一个变通方法不是您应该寻求的解决方案。修复编辑器,使其不插入
,这样您就不必担心它了,这不是更明智的做法吗?以下是我认为测试用户是否实际输入了内容的更好解决方案:
if (!strlen(trim(strip_tags($_POST['content'])))) {
// no content
}
else {
// some content
}
这基本上测试输入中是否有HTML标记以外的内容。首先用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
}
$str=ltrim($_POST['content']);
如果(substr($str,0,6)='
'){
$str=ltrim(substr($str,6));
}
若有($str){
//一些内容
}否则{
//没有内容
}
这样,您就可以忽略br前后的空格和新行。哦,我多么怀念PHP中Python的startswith()
方法!您从问题中复制了放错位置的右括号。@Boldewyn:是什么阻止您创建右括号的?我对我的个人项目也这么做。@nikc:我也这么做,但默认实现仍然是一个很好的扩展,特别是对于使用较少的PHP泵入全局名称空间的大量其他函数。@Boldewyn:我完全同意str_startswith
和str_endswith
应该存在。让我根据我的经验告诉你:这要看情况而定。如果编辑器有这个并且只有这个怪癖,那么修复服务器端将a)更快地实现,b)经得起未来考验。问题是,您必须将对编辑器的修复移植到包含的编辑器的每个新版本。但是,在上述情况下,从字符串的开头剥离
是一种合理的卫生措施,而且在更新编辑器软件时,您不会有麻烦。难道您不能只使用preg_match
并在
之后添加一个字符串结束锚吗?像preg_match('#^
$#')
但是如果用户在br之前插入空格怎么办?可能吗?如果是,see取决于实际场景中的用例,但是如果内容只是图像,这种方法将失败。
if (!strlen(trim(strip_tags($_POST['content'])))) {
// no content
}
else {
// some content
}
$str = ltrim($_POST['content']);
if (substr($str, 0, 6) == '<br />'){
$str = ltrim(substr($str, 6));
}
if ($str){
//some content
} else {
//no content
}