【问题标题】:remove leading and trailing break tags from string从字符串中删除前导和尾随中断标签
【发布时间】:2017-08-03 09:13:38
【问题描述】:

我开发了一个简单的 PHP 供稿系统,它显示所有登录用户的帖子。它工作正常,但是,我遇到了一个“错误”,如果用户创建的状态包含前导和/或尾随 <br> 点,它将破坏状态视图。

现在,在有人将其标记为重复之前;如果在删除尾随和前导<br>'s 时尝试了以下方法(以及我再也找不到的两个帖子):

  1. Remove <br>'s from the end of a string

  2. How to trim all leading/trailing
    code using php

但是,它们 a) 什么都不做,或者 b) 起作用,但删除字符串中的所有 <br> 点,即使它们在中间。

尝试:

$ctx = preg_replace('/^(<br>){0,}|(<br>){0,}$/m', '', nl2br(escape($post->ctx)));

$ctx = preg_replace('/(<br>)+$/', '', nl2br(escape($post->ctx)));

$ctx = preg_replace('#(( ){0,}<br( {0,})(/{0,1})>){1,}$#i', '', nl2br(escape($post->ctx)));

我已经为此工作了一段时间,但没有提出任何适当的修复方法。我已经接近 attempt c,但是,它会删除 all &lt;br&gt; 点。

感谢所有帮助,
谢谢!

【问题讨论】:

  • @Deadooshka Warning: preg_replace(): Unknown modifier '�'

标签: php regex


【解决方案1】:

尝试替换为可选由&lt;br /&gt; 包裹的内容(注意nl2br 插入&lt;br /&gt;):

^(?:<br />[\n\r]+)*(.*?)(?:<br />[\n\r]+)*$

演示:https://regex101.com/r/7KDCuA/3

还有 PHP 代码:

$input = "\nHello World\nhello world\n\n";
$unwrapped = preg_replace("|^(?:<br />[\n\r]+)*(.*?)(?:<br />[\n\r]+)*$|s", '$1', nl2br($input));
echo $unwrapped;

演示:http://codepad.org/BT0A5583

【讨论】:

  • 谢谢,我试试这个! :)
  • 我收到错误Warning: preg_replace(): No ending delimiter '^'
  • 啊,是的,我不再收到错误消息。但是,问题仍然存在。在我对它们使用nl2br 之前,知道新行不在字符串中是否有帮助?
  • 是的,nl2br 应该首先应用于$input
  • 我已经这样做了,就像这样:$ctx = preg_replace('/^(?:&lt;br&gt;)*(.*?)(?:&lt;br&gt;)*$/', '$1', $nl2br(escape($post-&gt;ctx)));。但是,它不起作用:/
【解决方案2】:

在我看来,这应该已经有所帮助:

nl2br(escape(trim($post->ctx)));

如果不允许用户为他们的状态输入 html,这将起作用。修剪将删除字符串开头和结尾的所有空格,因此传递给 nl2br 的字符串在开头和结尾没有换行符。

【讨论】:

    猜你喜欢
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    相关资源
    最近更新 更多