2014-03-26 25 views
0

我從舊的大型機表中有一個長(720個字符)的字符串。由於它們使用白色空間作爲在綠色屏幕上佈置文本的方法,因此它中有一個TON空白區域。PHP中的Wordwrap無法按預期方式運行

我試圖通過在PHP中使用wordwrap來模擬綠屏外觀(代碼如下)。我試圖直接在代碼中使用來自字段的調用(而不是使用$指令)。

我已經嘗試將該結果轉換爲htmlentities,然後nl2br'ing結果。

我試圖將空白轉換爲非休息空間。

我曾嘗試更換特殊字符,其他的事情(只是作爲測試)

我甚至試圖改變的字符數在換到4,在這種情況下,所有的地獄破散,並似乎只無論如何不管在白色空間之前或之後的字符組中有多少個字符,都會在空白處切割。

然而,在該字符串的文本有該字符串內的區段:

"1: B-140(GR) ON 140VHF F1 W/"A ZONE (#) GENERAL ALARM" T & L2: REPEAT STEP 1." 

應該L和2(一般報警Ť&大號2.等)之間斷裂。即使將剪切布爾值設置爲true,也會拒絕將L2切割爲兩行。 (即使將字符數量移至61甚至63),該字符串也不會將該「L2:」段分開。它要麼只在白色空間的L之前,要麼在白色空間的結腸之後。

CODE 
$instructions = (wordwrap($instructions,60, "<br />\n", true)); 

我錯過了什麼? (查找隱藏攝像機)

+0

爲L2被認爲是作爲一個字將任一L2之前打破或之後。而且,由於您已將其設置爲true,因此當它滿足60個字符時,它將在單詞中突破。當它們太大時它只會打破文字AFAIK, – Prix

回答

0

按照documentation for wordwrap: 「如果切口被設置爲TRUE,則該字符串總是包纏在之前指定的寬度。」換句話說,這個函數不會爲這個特定的應用程序削減它。

另一種方法將是使用str_split,其產生在60個字符精確切割元件的陣列:

$instructions = '1: B-140(GR) ON 140VHF F1 W/"A ZONE (#) GENERAL ALARM" T & L2: REPEAT STEP 1.'; 
$instructions_array = str_split($instructions, 60); 

foreach ($instructions_array as $line) { 
    echo $line."<br />\n"; 
} 
+0

絕對精彩!很棒!雖然這些文檔會讓我相信它會削減兩個字(例如在他們的Looooooooong示例中)。 – phpags

+0

是的,文檔中的示例並不理想。很高興這有助於! – larsAnders

相關問題