`wordwrap()` 可將長字符串按指定寬度換行,支援自定義換行符、是否強制截斷單詞。常用於郵件內容格式化、報表輸出、終端顯示優化。
string wordwrap (
string $string,
int $width = 75,
string $break = "\n",
bool $cut = false
)
<?php
$text = "TRADING ON MARGIN POSES ADDITIONAL RISKS AND IS NOT SUITABLE FOR ALL INVESTORS. A COMPLETE LIST OF THE RISKS ASSOCIATED WITH MARGIN TRADING IS AVAILABLE IN THE MARGIN RISK DISCLOSURE DOCUMENT.";
// 移除原有換行
$text = str_replace(["\n", "\r"], ' ', $text);
echo wordwrap($text, 40, "
\n");
// 輸出每行不超過 40 字符,以
換行
?>
$str = "A_very_long_word_without_spaces";
echo wordwrap($str, 10, "\n", false);
// 輸出:
// A_very_long_word_without_spaces (整行超過 10 但不切割)
echo wordwrap($str, 10, "\n", true);
// 輸出:
// A_very_long
// _word_witho
// ut_spaces (強制每 10 字符切割)
| 場景 | 設定建議 |
|---|---|
| 純文本郵件 | width=72, break="\n", cut=false |
| HTML 網頁顯示 | width=80, break=" ", cut=false |
| 終端/命令列輸出 | width=80, break="\n", cut=true |
| 固定寬度報表列 | width=列寬, break="\n", cut=true |
| 短訊/推播內容預覽 | width=70, break="\n", cut=false |
`wordwrap` 按**字節**計算寬度,**不支援多位元組字符**(中文佔 3 字節)。中文換行需自行實作:
function mb_wordwrap($str, $width = 75, $break = "\n", $cut = false, $encoding = 'UTF-8') {
$len = mb_strlen($str, $encoding);
if ($len <= $width) return $str;
$result = '';
$line = '';
$words = preg_split('/(\s+)/u', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($words as $word) {
$wlen = mb_strlen($word, $encoding);
if (mb_strlen($line, $encoding) + $wlen > $width) {
$result .= $line . $break;
$line = $word;
} else {
$line .= $word;
}
}
return $result . $line;
}
善用 `wordwrap` 並針對多位元組字符自行擴展,能輕鬆實現各類文本排版需求。