PHP - 从文本中隔离第一个字母

时间:2011-01-23 07:59:35

标签: php html string

我有一组文章,其中我想要为每篇文章的第一个字母设置样式(使用CSS)。

文章通常以paragrah开头,如:

<p> bla bla </p>

那么如何在&lt; span>标记中包装此文本的第一个字母?

5 个答案:

答案 0 :(得分:3)

除非你需要做一些极其幻想,否则还有:first-letter CSS selector

答案 1 :(得分:1)

您可以在所有CSS中执行此操作。

CSS支持“Pseudo-Elements”,您可以在其中选择第一个字母/第一个单词,并将其格式化为与文档的其余部分不同。

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

有兼容性图表;其中一些可能在IE 6中不起作用

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

答案 2 :(得分: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";

答案 3 :(得分:1)

你可以添加一个Php范围但可能不那么干净 $ s =“

la la

”; $ strip = trim(strip_tags($ s)); $ t = explode('',$ strip); $ first = $ t [0];

//然后用围绕它的span替换第一个字符 $ replace = preg_replace('/ ^?/','$ 1',$ first);

//然后替换字符串中该单词的第一次 $ s = preg_replace('/'。$ first。'/',$ replace,$ s,1);

echo $ s;

//未经测试

答案 4 :(得分: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);
}