匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 10 年前

php 中英文 字串換行 字串斷行 字串如何適應欄寬?

請問一個表單有一個td設成寬度100,但是遇到中英文時,字串換行的有點奇怪.

例如一個推薦閱讀的"閱讀地圖"網站 http://booksbrowser.org/

首頁最新寫序就有幾本中英文混雜的書名(ex:跟國際級大師學CG電繪:Photoshop&Painter 數位插圖繪製技法)造成換行超過當初設定td寬度100的限制而過寬.請問怎麼解決較好? ps.這是用php寫的.

感謝經驗分享~!

已更新項目:

to 貓霸:

加了之後發現ie可以適應欄寬,但firefox還是不行,跟沒加的效果是一樣的.

謝謝您的建議!

2 個解答

評分
  • 貓霸
    Lv 5
    10 年前
    最佳解答

    在你的php的html段的head裡加上

    table td{

    word-wrap: break-word;

    word-break: break-all;

    }

    2011-03-06 22:48:25 補充:

    是<style></style>裡

    2011-03-07 15:36:04 補充:

    對付webkit、firefox,你加上

    {

    word-wrap:break-word;

    word-break:break-all;

    -moz-binding: url('./wordwrap.xml#wordwrap');

    overflow: hidden;

    }

    2011-03-07 15:36:58 補充:

    千萬別去對原始字串做任何更動~不然會出大條代誌

    2011-03-07 15:39:05 補充:

    另一人的教法,是從25個英文字強制斷行,

    那也代表如果以big5編碼的中文字也會從中被切割變亂碼

    慎用~

    2011-03-07 15:45:26 補充:

    你把底下的檔案做成xml檔存在網站上

    http://www.gomartwhere.com/stock/wordwrap.xml

    2011-03-07 15:47:51 補充:

    另一個解決的方法,

    在table的style裡加上table-layout:fixed 也可以解決firefox的表格不斷行的問題

  • 丕青
    Lv 5
    10 年前

    這個問題是因為連續的英文字母,

    瀏覽器把連續的字母當作一個"字",

    所以不會斷行,

    所以只要讓連續字母補上空白就可以了,

    在這裡提供php程式正規表示法的做法:

    <tr>

    <td width="100"><?php echo preg_replace('/([^\s]{25})(?=[^\s])/m', '$1 ', $output); ?></td>

    </tr>

    其中$output代表這個表格要輸出的文字,

    綠色的25代表程式判斷超過25個連續字母就加上空白。

    2011-03-07 23:56:50 補充:

    喔,之前這招用在英文網站上沒問題...

    感謝樓上指正,

    既然會對中文照成影響,

    那稍微修改一下正規應該就可以了,

    /([a-zA-Z]{25})(?=[a-zA-Z])/m

    參考資料: 經驗
還有問題?馬上發問,尋求解答。