2011-01-23 2 views
2

У меня есть набор статей, в которых я хочу создать первую букву из каждой статьи (с помощью CSS).PHP - изолировать первую букву от текста

статьи обычно начинаются с paragrah, как:

<p> bla bla </p> 

Так как я мог обернуть первую букву из этого текста в < span> тег?

ответ

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

Там есть график совместимости; некоторые из них могут не работать в IE 6

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

+0

Они почти все работают в IE7, и все они работают в IE8. У IE6 есть проблемы, но у него есть проблемы с множеством вещей. –

+2

http://w3fools.com/ –

3

Если вам нужно сделать что-то чрезвычайно фантазии, есть также :first-letter CSS selector.

+1

Похоже, что это вполне поддерживается: http://www.quirksmode.org/css/contents.html – CAFxX

1

можно добавить интервал Php, но не может быть чистым $ s = "

ла ла

"; $ strip = trim (strip_tags ($ s)); $ t = взрыв ('', $ strip); $ first = $ t [0];

// затем заменить первый символ на диапазон вокруг него $ replace = preg_replace ('/ ^? /', '$ 1', $ first);

// затем заменить первый раз на это слово в строке $ s = preg_replace ('/'.$ first.'/', $ 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); 
}