2011-10-25 157 views
1

我和幾個參加相同編程課程的朋友目前已經困惑了好幾個小時,希望這裏有人能幫忙。 目標是獲取一個網址列表,按照新行分割,爲每個網址預先添加[img]並附加[/ img],以便適用於公告欄。實際的代碼包含一個開關,以允許[img]和[thumb] bbcodes,但兩者具有相同的效果。 相反輸出PHP循環錯誤 - 只有部分循環被循環?

[ img]1[/ img] 
[ img]2[/ img] 

的它輸出

[ img]1 
2[ /img] 

同樣的情況,對於任意數量的網址。這是我使用的代碼。

<?php 

    $url_f = (isset($_POST['text'])) ? $_POST['text'] : false; 
    $thumb = (isset($_POST['type'])) ? $_POST['type'] : false; 
    $urls = ($url_f) ? explode('\n',$url_f) : ''; 

    ?> 

    <textarea rows='20' cols='40' readonly='1'> 


    <?php 
    switch ($thumb){ 
     case 'img': 
      for ($i = count($urls)-1; $i >= 0; $i--) 
      { 
       echo "[img]". $urls[$i] ."[/img]\n"; 
      } 
      break; 

     default: 
      break; 

     case 'thumb': 
      for ($i = count($urls)-1; $i >= 0; $i--) 
      { 
       echo '[thumb]'. $urls[$i] ."[/thumb]\n"; 
      } 
      break; 

    } 

    ?> 

    </textarea> 
+4

'default'應該會持續到你知道的地方,否則它會跳過超出它的任何東西。 –

+0

在這種情況下不會出現,但感謝提示。 – SatansFate

+0

這個開關真的很時髦。除了交換機的最後一行之外,別人也沒有看到任何默認設置。{}實際上$ urls是否按預期填充? – Tim

回答

1

有三種不同類型的換行:\ r \ n和\ r \ n。我沒有做太多的Web開發,但是不同的操作系統仍然可能會發送不同的換行符,所以您必須進行一些檢查以確定要分割的字符。

在您的代碼中,由於\ n不工作,換行符可能是\ r \ n或\ r。

編輯:單引號字符串文字可能是問題。

+0

這是有道理的。我將如何去檢查?我可以爆炸它,然後檢查長度? – SatansFate

+1

我錯過了一些東西,因爲我有一段時間沒有碰過PHP。您使用的單引號應該用雙引號替換,以便轉義序列能夠正常工作。試試看,如果還有問題,我會發布代碼。 – Timiz0r

+0

Aaaaah! Jeez,提醒我爲什麼我非常討厭PHP。花費數小時思考單引號和雙引號之間的區別......修正了它。非常感謝所有幫助過我的人。 – SatansFate

1

您的問題是'\n' !== "\n"。前者被視爲「反斜槓n」,而後者則被處理爲換行符(ASCII 0xA,bein LF)。有關更多信息,請參閱Double Quoted Strings

關於你的循環,你可能想看看foreach