PHP:将标题拆分为跨度

时间:2011-03-29 12:40:38

标签: php

我有一个简单的内容旋转器,显示如下文字:

<h4><span>Featured Article</span></h4> 
                        <h2><span>Lorem ipsum dolor sit amet,</span> <span>consectetur adipisicing elit</span></h2> 
                        <span class="author">by Cameron Drysdale</span>

正如您所看到的,h2将其文本拆分为<span>个标签。这样我就可以在粉红色方框中看到以下效果:http://www.paperviewmagazine.com/

问题是如何自动执行此操作,因为标头将从数据库生成,默认情况下不会包含span标记。关于如何使用PHP添加一些标签来包装标题的某些部分的任何想法?

编辑:我正在使用WordPress,所以标题会显示为<?php the_title(); ?>,我可能想要在x个字符后分割文字

EDIT2:我应该注意,我们的想法是使用span标签拆分内容,这也可能是这种可能性:<span>this is</span> <span>some text</span> <span>I'm sharing</span>

5 个答案:

答案 0 :(得分:0)

您用于拆分的标准是什么。 假设它是逗号(您可以使用单词/字母等数量),只需使用

拆分字符串
<? $arr= explode(",",$your_db_field);?>
<span><?=$arr[0]?></span><span><?=$arr[1]?></span>

答案 1 :(得分:0)

一些问题:当您的示例显示它们是相同的字体时,为什么您的内容分为两部分?是否总会有一个逗号后跟一个换行符?

我问的原因是因为你可以简单地将你的标题插入数组并在逗号上爆炸()。

  编辑:我正在使用WordPress等   标题会显示出来,我可能想要   在x数之后拆分文本   字符

好的,这更有意义。据我所知,你不需要使用多个标签:

<?php

    $chars_per_line = 15;
    $title = "This is my title and I hope you like my article";
    $title_length = strlen($title);
    $lines = ceil($title_length / $chars_per_line);

    for ($i=0; $i<$lines; $i++) {
        $pos_start = $i * 15;
        $pos_end = $pos_start + ($chars_per_line - 1);
        echo substr($title, $pos_start, $pos_end) . '<br />';
    }

?>

答案 2 :(得分:0)

如果您的文字包含<br/>个标签或\n,则可以将其拆分为数组,然后对其进行迭代。

$lines = split('<br/>',$text);
foreach($lines as $line){
   echo "<span>".$line."</span>";
}

当然你也可以用逗号分割文字。

按字符长度btw分割文本。你可以用它。

$lenght = 100;
$start = 0;
$lines = array();

while(strlen($text) < $start)) {
  $lines[] = substr($text, $start, $start+$length);
  $start += $length; 
}

答案 3 :(得分:0)

您不需要跨度即可获得所需结果。您可以将h2封装在具有固定宽度的div中,如果内容很长,内容将自动在两行上流动。

请确保您将此技术用于非破坏性空间(&nbsp;)作为最后一个单词之间的空格以避免孤儿。

我真的想在特定的字符上打破它,然后我会按Mr. Zen的答案去做

修改

以下是有效演示http://jsfiddle.net/38srk/3/

的链接

编辑(再次):

我仍然认为完整的html / css解决方案仍然是最好的,但是如果你真的想用PHP做这里是你的解决方案的开始:

$str = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit';
$words = explode(' ', $str);
$nbWords = count($words);
$nbWordsPerLine = 4;

$output = '<span>';
for($i = 0; $i < $nbWords; $i++) {
    if($i % $nbWordsPerLine == 0
       && $i > 0
    ) {
        $output .= '</span><span>';
    }
    $output .= $words[$i];
    if ($i + 1 < $nbWords){
       $output .= ' ';
    }
}
$output .= '</span>';

echo $output;

这会给你这样的东西:

<span>Lorem ipsum dolor sit </span><span>amet, consectetur adipisicing elit </span> 

答案 4 :(得分:0)

或者如果您还没有设计数据库,只需要两个字段 - title_line_1和title_line_2。无需拆分。