2011-07-07 46 views
1

我想使用preg_replace將<br><br />轉換爲回車(&#13;)。我的問題似乎是,它要麼沒有找到<br>的或不承認我試圖在傳遞的十六進制代碼這裏是我的相關PHP:打破行回車preg_replace

preg_replace('`<br(?: /)?>(\x{13}/u)`', '$1', $content); 

其他信息:琴絃我傳遞有&quot;,但我不認爲這會干擾preg_replace()

以下是幫助我得到幾個鏈接這一步:
http://www.webmasterworld.com/forum21/10973.htm(使用回車,而不是在提示\n
http://us2.php.net/manual/en/reference.pcre.pattern.modifiers.php#58409(使用\x{13}而不是&#13

回答

0

嗯,你似乎有的preg_replace格式化有點奇怪。不知道你爲什麼用這樣的反向引用做這件事?對於這樣簡單的事情,第一個變量應該是正則表達式。第二個應該是替換,第三個應該是:

preg_replace('%<br.*?>%', '&#13;', $content); 

我認爲這將工作,但我不是偉大的正則表達式。 。*?應該匹配任何字符到下一個>

+1

分號在字符串中,所以不會被解釋爲以結尾爲結尾的行。所以你第一次執行應該運行良好。 –

+0

謝謝Ben!現在它正在查找並替換我的'
'! '&#13'似乎沒有在我的工具提示中創建回車,但這不是PHP的問題。 – Kevin

+0

@ paul.s你能解釋一下你的評論嗎?我嘗試使用'[\ x {13}/u]',但它只是把它作爲明文。 – Kevin

0

您是否將此顯示器用於網頁?如果是這樣,我不確定您爲什麼要替換回車符<br />。從你正確地發佈第一個鏈接的答覆指出:

雖然插入一個回車/換行( 或 )的實體將產生在互聯網瀏覽器的Windows所需的結果,它不是任何標準的一部分並且不支持,例如Windows上的Gecko瀏覽器。我還沒有測試過其他平臺。

@choster

不過來糾正你的問題。第一個參數是要匹配的模式,第二個參數是要替換匹配的內容,第三個參數是內容。

正確的實施將是這樣的

echo preg_replace('/<br\s?\/?>/', '\x{13}/u', "<br> <br />"); 

我不知道,如果\x{13}/u位將工作,我沒有測試過。

+0

原因是因爲我想將返回的內容放入只輸出明文'
'的工具提示中。我應該在我的原始問題中更具體 - 儘管我確實在頁面中加入了一個關於在工具提示中放置換行符的鏈接。 – Kevin

+0

您是否閱讀了我的答案,並在報價單上列出了您所列的頁面?它不是任何標準的一部分,因此很有可能它無法正常工作。我只是繼續回答,以顯示你的正則表達式是如何變形的。不幸的是,我不知道如何在PHP中打印十六進制代碼 –

+0

Paul,是的,感謝您的幫助。我將不得不在一些瀏覽器中休息。本的解決方案在IE中很好用。隨着標準的發展,我將不得不更新我的功能。這是我最後得到的結果: 'preg_replace('%',' *',$ key);' 帶*的換行符。它也適用於Chrome。 – Kevin