2017-03-13 152 views
1

我開發了一個簡單的PHP供稿系統,它顯示所有登錄的用戶帖子。它工作正常,但是,我遇到了一個「bug」,如果用戶的狀態包含前導和/或尾隨<br>點,它將打破狀態視圖。從字符串中刪除前導和尾隨中斷標記

現在,在任何人將其標記爲重複之前,如果已經嘗試以下方法(和兩個從職位更多,我再也找不到)在去除拖尾和先行<br>的:

  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))); 

我一直在這一會兒了,但已經想出了沒有適當修復。我已經接近嘗試c,但是,它會刪除全部<br>點。

所有幫助表示讚賞,
謝謝!

+0

@Deadooshka'警告:preg_replace():未知修飾符' '' –

回答

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; 

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

+0

謝謝,我會試試這個!:) –

+0

我得到的錯誤'警告:preg_replace():無結束分隔符'^'' –

+0

啊,是的,我不再出現錯誤。但是,問題仍然存在。在我使用'nl2br'之前,知道這些新行不在字符串中有幫助嗎? –

2

聽起來好像這應該已經幫助:

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

這將工作,如果不允許用戶爲自己的狀態進入的HTML。修剪將刪除字符串開頭和結尾的所有空格,因此傳遞給nl2br的字符串在開始和結尾都沒有換行符。

相關問題