2011-10-25 130 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