Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中删除一个字符串的一个实例?_Php - Fatal编程技术网

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

如何在PHP中删除一个字符串的一个实例?,php,Php,我在cms上有一个开源编辑器,可以自动插入 <br /> 只要用户不按backspace键几次就可以删除break标记,在这种情况下,即使post的前8个字符不是break标记,也会被删除 因此,只有在前6个字符由break标记组成的情况下,我如何删除输入的前6个字符呢。此外,我不想删除所有断开标记,只删除文章开头的一个。您可以使用例如preg\u replace: $text = preg_replace('#^<br />#', '', $text); $text

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

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