我开发了一个简单的 PHP 供稿系统,可以显示所有已登录的用户帖子。它工作正常,但是,我遇到了一个&#34; bug&#34; ,如果用户已经创建了包含前导和/或尾随<br>
点的状态,那么&# 39; ll打破状态视图。
现在,在任何人将此标记为重复之前;如果在删除尾随和前导<br>
时尝试了以下方法(以及另外两个我无法找到的帖子):
但是,他们 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)));
我已经在这方面工作了一段时间,但是没有提出正确的修复。我已接近尝试c ,但是,它会删除所有 <br>
点。
感谢所有帮助,
谢谢!
答案 0 :(得分:2)
尝试替换<br />
选项包含的内容(请注意nl2br
<br />
}:
^(?:<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;
答案 1 :(得分:2)
听起来像我这应该有帮助:
nl2br(escape(trim($post->ctx)));
如果不允许用户输入html作为其状态,这将有效。修剪将删除字符串开头和结尾的所有空格,因此传递给nl2br的字符串在开头和结尾都没有换行符。