【问题标题】:How to insert linebreaks in generated html code如何在生成的 html 代码中插入换行符
【发布时间】:2013-07-31 14:49:34
【问题描述】:

我正在使用 codeigniter 生成一个 html 表以插入到模板视图中。不幸的是,这是一条很长的字符串,例如:

<table id="myDataTable" class="table table-bordered table-striped" style="clear: both"><tbody><tr><td>id</td><td><a href="#" id="id" data-type="text" data-pk="2" data-url="/post" data-title="id">2</a></td></tr><tr><td>email</td><td><a href="#" id="email" data-type="text" data-pk="2" data-url="/post" data-title="email">A@B.COM</a></td></tr><br><tr><td>notes</td><td><a href="#" id="notes" data-type="text" data-pk="2" data-url="/post" data-title="notes">notes go here</a></td></tr><br> ...

我希望它看起来更像:

<tr>         
    <td>field1</td>
    <td><a href="#" id="field1" data-type="select" data-pk="1" data-value="" data-original-title="Select field1"></a></td>
    <td><span class="muted">Select, loaded from js array. Custom display</span></td>
</tr>

<tr>         
    <td>field2</td>
    <td><a href="#" id="field2" data-type="select" data-pk="1" data-value="" data-original-title="Select field2"></a></td>
    <td><span class="muted">Select, loaded from js array. Custom display</span></td>
</tr>

这是我的代码:

$string='<table id="myDataTable" class="table table-bordered table-striped" style="clear: both"><tbody>';

foreach ($array as $key => $value) {
    $string=$string."<tr><td>$key</td>";  
    $element='<td><a href="#" id="'.$key.'" data-type="text" data-pk="'.$rowID.'" data-url="/post" data-title="'.$key.'">'.$value.'</a>'.'</td></tr>'."<br>";
    $string=$string.$element;
}

$string=$string.'</tbody></table>';

我该如何解决这个问题?

【问题讨论】:

  • 为什么用 PHP 生成 HTML? CodeIgniter 允许您分离视图、控制器和模型,这有助于您将 PHP 在视图中的使用保持在最低限度。你可以试试&lt;td&gt;&lt;?php echo $yourValue; ?&gt;&lt;/td&gt;。使用它,您可以在视图中正常缩进大部分 HTML,而不必为\n\t 烦恼。你所做的并没有错,但对我来说,它似乎与 CodeIgniter 背道而驰(我个人觉得以这种方式生成 HTML 相当难看)。
  • 它有什么区别?...如果要检查输出,请使用浏览器控制台,将全部组织成树

标签: php html codeigniter


【解决方案1】:

您可以将换行符 (\n) 和制表符 (\t) 添加到您的 $string 变量中。

例如:

$string='<table id="myDataTable" class="table table-bordered table-striped" style="clear: both">\n\t<tbody>\n';
foreach ($array as $key => $value) {
    $string = $string."<tr>\n\t<td>$key</td>\n";  
    $element = '\t<td><a href="#" id="'.$key.'" data-type="text" data-pk="'
            .$rowID.'" data-url="/post" data-title="'.$key.'">'.$value.'</a>'
            .'</td>\n</tr>'."<br>";
    $string = $string.$element;
}
$string=$string.'\n\t</tbody>\n</table>';

【讨论】:

    【解决方案2】:

    您可以在循环中使用\n\t 字符。

    例如:

    $string=$string."<tr>\n\t<td>$key</td>\n"; 
    $element='\t<td><a href="#" id="'.$key.'" data-type="text" data-pk="'.$rowID.'" data-url="/post" data-title="'.$key.'">'.$value.'</a>'.'</td>\n</tr>'."<br>";
    

    另外,&lt;/tr&gt; 之后不应有换行符。

    【讨论】:

      【解决方案3】:

      你必须用 \n 和 \t 为制表符添加换行符

      $string='<table id="myDataTable" class="table table-bordered table-striped" style="clear: both">\n\t<tbody>\n';
      
              foreach ($array as $key => $value) {
      
              $string=$string."\t\t<tr><td>$key</td>\n";  
              $element='\t\t<td><a href="#" id="'.$key.'" data-type="text" data-pk="'.$rowID.'" data-url="/post" data-title="'.$key.'">'.$value.'</a>'.'</td></tr>\n';
              $string=$string.$element;
              }
      
      
                $string=$string.'\t</tbody>\n</table>';
      

      另外 br 标记也不允许直接在表格中,所以我删除了它。无论如何,它没有任何用途,因为行会自动出现在新行上

      【讨论】:

        【解决方案4】:

        您可以将带有\n\t 的换行符添加到您的$string 变量中:

        $string='<table id="myDataTable" class="table table-bordered table-striped" style="clear: both">\n\t<tbody>\n';
        
                foreach ($array as $key => $value) {
        
                $string=$string."\t\t<tr><td>$key</td>\n";  
                $element='\t\t<td><a href="#" id="'.$key.'" data-type="text" data-pk="'.$rowID.'" data-url="/post" data-title="'.$key.'">'.$value.'</a>'.'</td></tr>\n'."<br>";
                $string=$string.$element;
                }
        

        【讨论】:

          【解决方案5】:

          我建议在回声中尝试使用 \n 和空格,例如:

          $string=$string."<tr>\n    <td>$key</td>";
          

          我相信结果会是:

          <tr>
              <td>field1</td>
          

          编辑:Michael 使用 \t 和 \n 的反应要好得多。

          【讨论】:

            猜你喜欢
            • 2020-10-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-08-06
            相关资源
            最近更新 更多