2011-03-29 59 views
1

我有一个显示的文字像这样一个简单的内容肩: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>

+0

你想如何识别字符串在哪里包装的位置?只是随机?或者在x字符之后?或逗号后? – theomega 2011-03-29 12:42:22

+0

好点,我说3-4个字之后 – Cameron 2011-03-29 12:44:06

回答

0

用于分割的标准是什么? 假设这是一个逗号(,你可以使用的字/字母数量等),只是拆分使用

<? $arr= explode(",",$your_db_field);?> 
<span><?=$arr[0]?></span><span><?=$arr[1]?></span> 
+0

如果有多个逗号? – theomega 2011-03-29 12:49:43

+0

那么你有$ arr [2],全部取决于你如何分离字符串。你可以用逗号前面的第一部分,并将其余部分用作下一行分割。 – 2011-03-29 12:50:32

+0

或者使用'explode(“,”,$ your_db_field,2)'为了仅分裂一次:) – jensgram 2011-03-29 12:52:47

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 />'; 
    } 

?> 
+0

内容被分割,以便我可以用背景颜色产生包装效果。第一行结尾的逗号是巧合。 OP中的一个例子也是一种有效的可能性。 – Cameron 2011-03-29 12:56:21

+0

代码欢呼,但'
'不起作用。它需要包含标题的部分标签。 – Cameron 2011-03-29 13:10:52

+0

如何在粉盒表格中嵌入具有指定宽度的表格?这将有效地强制您的文本换行而不必分解标题字符串。至于以前的评论,请相应地调整echo语句。 – mike 2011-03-29 13:12:46

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; 
} 
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> 
+0

我需要跨度,所以我可以有内联背景颜色,如果我使用h2背景,它将是块,这不是我想要的。 – Cameron 2011-03-29 12:58:55

+0

为演示而欢呼。它确实给出了类似的效果,但它不能像我的示例那样正确分解单词,因此需要使用span标签。 – Cameron 2011-03-29 13:09:59

0

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