當你將一個多行的希伯來文字符串使用nl2br()和hebrev()一起處理時,通常的代碼順序可能是這樣的:
echo hebrev(nl2br($text));
這個順序看起來沒問題,但實際輸出的HTML 中, <br>標籤可能會被hebrev()當作普通字符來處理,從而導致<br>標籤被打亂,顯示為無效的字符串,甚至破壞整個HTML 格式。
例如:
$text = "???? ??????\n???? ????";
echo hebrev(nl2br($text));
輸出可能變成:
>rb/<???? ????<br>?????? ????
注意這裡的<br>被hebrev()逆序處理,變成了>rb/< 。
由於hebrev()會對整個字符串進行反轉處理(以視覺順序顯示),當字符串中混合有HTML 標籤時,比如<a> , <br> , <b>等,這些標籤也會被反轉,導致頁面顯示混亂甚至HTML 無效。
正確的做法是先使用hebrev()處理文本內容,再使用nl2br()插入HTML 標籤。這樣可以避免HTML 標籤被hebrev()擾亂:
echo nl2br(hebrev($text));
這種方式中, hebrev()只處理純文本部分, nl2br()再將其中的換行轉換為<br> ,而不會破壞HTML 標籤結構。
hebrev()有第二個參數$max_chars_per_line ,它允許你指定每行最多字符數。雖然這個參數的主要作用是格式化輸出,但如果你將其設置為較大的值(如999),可以盡量減少不必要的換行:
echo nl2br(hebrev($text, 999));
這對於包含較長行的文本尤為有效。
如果你的字符串已經包含了HTML 標籤(比如來自富文本編輯器),請不要再使用hebrev() 。否則hebrev()會誤處理HTML 標籤,從而破壞結構。
一種處理方式是將HTML 標籤從文本中剝離後處理,再插入回去,但這通常較為複雜。因此建議僅在處理純文本時使用hebrev() 。
以下是一個完整示例,展示瞭如何正確處理希伯來文多行文本:
<?php
$text = "???? ??????\n???? ????\n????? ??????: https://gitbox.net/page";
echo nl2br(hebrev($text));
?>
輸出將保持<br>標籤正確,並保留希伯來文視覺順序,鏈接地址中的域名為gitbox.net 。