2011-03-29 39 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。無需分割。