? 發問時間: 電腦與網際網路程式設計 · 1 0 年前

php echo整個段落文,遇英文及行尾遇標點,斷行很不整齊

php語法撰寫

我echo 在網頁的文章內容

本應整整齊齊(原始碼都沒啥問題),但echo在網頁上,麻煩大了:

畫面如下:

L1:筆者今年暑假,自費至溫哥華五週,參訪運動場

L2:界最適合人類居住的城市-加拿大溫哥華

L3:(Vancouver)。筆者今年暑假,自費至溫哥華五

L4:筆者今年暑假,自費至溫哥華五週,參訪運動場

L5:筆者今年暑假,自費至溫哥華五週,參訪運動

L6:週,參訪運動場館與運動賽會之成功經驗。

L2無法齊行,因為英文字:(Vancouver)非要背著我跑去團圓,

L5無法齊行,也因為L6的第二個字出現標點符號,我是不在意啦,但案主非常在意,請問我該怎麼辦??(CSS的強迫齊行無論如何強迫都沒有用,如果自己在原始碼加上<br>是很不錯,但未來換版面的話就會出問題)

請救我~~

請勿回答<pre>等html或css語法,我能試都試了,

可能要使用php的substr()去抓字,一個字元一個字元抓,

以及strlen()去限制每行字

但又要每個字去判斷是中文還是英文,

且文章每行的行首會避掉標點符號又是怎麼回事?

會跟ie瀏覽器設定有關係嗎?

我看遍yahoo新聞,只要有中英文混排,都會有行尾不整齊的問題

請問該如何寫php function終極解決

已更新項目:

我沒有權限使用圖片

但是客戶要的東西很簡單

管他英文還是中文還是數字或標點

每行字數都相同就可以,

如果英文字被迫斷行,

客戶可能也覺得無所謂(不過英文字還算少數,主要問題在每行行首”不要”避標點,也就是不要因為行首避標點,而讓前一行的最後一個字提前折行,這樣前一行最後一個字會因此空白)

2 個已更新項目:

從word時代,這種問題就很令我困擾,後來發現word可以不勾選行首避標點的設定,但學了網頁後,我不懂為何網頁也來一個行首避標點,當然如果我手動調整斷行,當然可以隨心所欲,可是我學了php後,怎可能每一行都來一個手動斷行(自己在原始碼加上<br>)

我這次不光為了客戶,因為每行行首避標點,使每行字數參差的問題,已困擾我很久,我如果用html靜態頁面自己排,我也得一行一行檢查那些標點,然後強迫<br>,就算我使用<pre>等,在編輯器看來整齊,一輸出瀏覽器又被詛咒了....

3 個已更新項目:

如果真的要例子的話

http://tw.news.yahoo.com/article/url/d/a/061217/2/...

你仔細看每一行的最右邊,

如果中英文夾雜,或者半形的問題,可能讓它右邊不整齊

可是

形成一個...

少數一些...

明明都全是中文字

右邊為何還會不整齊

當然是因為”不單是在改變世界,”那個,在作怪...

3 個解答

評分
  • 1 0 年前
    最佳解答

    之前有很多討論是解決全數字或英文且沒有任何空白分隔的斷行問題

    一開始,在下以為您的問題跟那一樣

    後來才注意到您的問題點不太一樣

    在下剛好有一個範例

    這範例是在下用來抓取新聞訊息當作列表標題用的

    稍微修改一下,運用遞迴來執行抓取固定每行字串

    剛好符合您的需要。

    此範例不論是全數字或英文且沒有任何空白分隔

    或是英文文章最後一個單字太長而會自行到下行團圓

    或是中英混雜的文章都可以適用

    唯一會剩下的問題是只有當中英混雜每個字的字元數不一樣

    而切出的每一行時,兩行相間最後會有一個字元(半個中文字)

    仍然無法完全齊尾,其他的就都沒問題了。

    另外就是,在瀏覽器中,若有中英加空白混雜的時候,

    視覺上本來就會顯示不一樣長度

    就算每行的總字元數都相等問題依然一樣。例如下面這一段

    ---------------------------

    筆者今年暑假,自費至溫哥華五週123456789012

    34567890 123456 7890 123456 78901234 56788

    9012345678 90123456 78901 2345678901234567

    890123456789,參訪運動場界最適合人類居住的

    ---------------------------

    所以如果遇到很龜毛的客戶,在下的建議是

    除了用的以下的function以外,最好將function處理過的內容

    再用< pre >< /pre >標籤包起來,這樣至少可以更整齊一點。

    <?

    function SplitText ($TEXT) {

    $ct=42; //每一行要斷的字元數

    for($wr=0;$wr<$ct;$wr++) {

    $ch=substr($TEXT,$wr,1);

    if(ord($ch)>127) $wr++;

    //偵測最後一個字元

    //若大於127,即表示是中文字,必須增加一個字元

    //否則切出來會是半個中文字

    }

    $newTEXT .=substr($TEXT,0,$wr)."<br>";

    echo $newTEXT;

    $subTEXT=substr($TEXT,$wr);

    if (strlen($subTEXT) <= $ct) {echo $subTEXT;}//結束

    else {SplitText ($subTEXT);}//未切完的一直到切完為止

    }

    ?>

    套用時

    <?

    $a="筆者今年暑假,自費至溫哥華五週,參訪運動場界最適合人類居住的城市-加拿大溫哥華(Vancouver)。筆者今年暑假,自費至溫哥華五筆者今年暑假,自費至溫哥華五週,參訪運動場筆者今年暑假,自費至溫哥華五週,參訪運動週,參訪運動場館與運動賽會之成功經驗。";

    echo "<pre>";

    echo SplitText ($a);

    echo "</pre>";

    ?>

    2006-12-17 15:30:04 補充:

    範例試看看 http://swc.sdcs.com.tw/YahooKnowledge/q46/

    參考資料: 自己的經驗~~~
  • 匿名使用者
    6 年前

    到下面的網址看看吧

    ▶▶http://*****

  • Chiu
    Lv 4
    1 0 年前

    冷泡茶已經寫得差不多了, 除了"許功蓋"等有 \ 的中文字沒有考慮到.

    1. 英文字 (word) 本來就要團員, 總不能把字斷在中間吧?

    2. 行首不是標點符號, 這也是基本的寫文章排版規則?

    小君期望的 output 是什麼呢?

    像是 word 那樣的置中對齊嗎?

    能否用圖呈現給我們看一下?

還有問題?馬上發問,尋求解答。