2011-01-23 11 views
2

私は各記事(CSS付き)の最初の文字をスタイルしたい記事のセットを持っています。PHP - テキストから最初の文字を分離する

<p> bla bla </p> 

それでは、どのように私は< span>タグ内のこのテキストからの最初の文字をラップすることができます:

記事は、通常のように、のparagrahで始まりますか?

答えて

1
<?php 

$str = '<p> bla bla </p>'; 
$search = '_^<p> *([\w])(.+) *</p>$_i'; 
$replacement = '<p><span>$1</span>$2</p>'; 

$new = preg_replace($search, $replacement, $str); 

echo $new."\n"; 
1

すべてのCSSでこれを行うことができます。

CSSは、最初の文字/最初の単語を選択し、それを文書の他の部分と異なる形式にすることができる「疑似要素」をサポートしています。

http://www.w3schools.com/CSS/CSS_pseudo_elements.asp

互換性チャートがあります。あなたは非常に空想、また:first-letter CSS selectorあります何かをする必要がありない限り、これらのいくつかは、

http://kimblim.dk/css-tests/selectors/

+0

ほとんどすべてIE7で動作し、IE8で動作します。 IE6には問題がありますが、多くの問題があります。 –

+2

http://w3fools.com/ –

3

IE 6で動作しない場合があります。

+1

かなりサポートされているようです:http://www.quirksmode.org/css/contents.html – CAFxX

1

あなたは、PHPのスパンを追加することができますが $ S =「

・ラ・ラ・

」としてきれいではないかもしれません。 $ strip = trim(strip_tags($ s)); $ t = explode( ''、$ strip); $ first = $ t [0];

//最初の文字を置き換えます。 $ replace = preg_replace( '/ ^?/'、 '$ 1'、$ first);

//文字列の最初の単語を置き換えます。 $ s = preg_replace( '/'.$最初に'/'、$ replace、$ s、1);

echo $ s;

//

0

をテストしていません、私はまだ汎用性の高い方法を発見していませんでしたが、伝統的なコードの実装は、(それが遅くなることがあります)に機能します。次に

function pos_first_letter($haystack) { 
    $ret = false; 
    if (!empty($haystack)) { 
    $l = strlen($haystack); 
    $t = false; 
    for ($i=0; $i < $l; $i++) { 
     if (!$t && ($haystack[$i] == '<')) $t = true; 
     elseif ($t && ($haystack[$i] == '>')) $t = false; 
     elseif (!$t && !ctype_space($haystack[$i])) { 
     $ret = $i; 
     break; 
     } 
    } 
    } 
    return $ret; 
} 

呼び出す:

$i = pos_first_letter($your_string); 
if ($i !== false) { 
    $output = substr($s, 0, $i); 
    $output .= '<span>' . substr($s, $i, 1) . '</span>'; 
    $output .= substr($s, $i+1); 
} 
関連する問題