我有一个奇怪的问题,我不知道如何解决它。我想得到一个文本字段的第一个字符,我从数据库中得到。对于这个字符,我将应用CSS样式使其变大。
如果你尝试下面的代码,你会明白我的问题是什么:
<?php
$str_en = "I am a sentence.";
echo $str_en[0];
echo "<br /><br />";
$str_fr = "À tous les jours je fais du PHP.";
echo $str_fr[0];
echo "<br /><br />";
$str_fr = "Étais-tu ici?";
echo $str_fr[0];
?>
上面的代码将输出:
似乎一个法语字符在字符串中使用了不止一个字节。问题是,并不是我所有的句子都以法语字符开头。有人知道我怎么能有一个函数来转换这个:
<?php
$str_fr = "Étais-tu ici?";
?>
$str_fr = "<span class='firstletter'>É</span>tais-tu ici?";
参见mb_substr
(http://www.php.net/manual/en/function.mb-substr.php)
$first_char = mb_substr($string, 0, 1, 'utf-8'); // You may change the forth parameter according to your needed encoding.
mb_substr
遵循编码并返回表示这里第一个字符的所有字节。
CSS3有一个伪类::first-letter
,它只选择首字母。
的例子:
你的HTML是:
<p id="french_text">Étais-tu ici?</p>
然后你可以用CSS3:
p:first-letter { /* Your properties */ }
(注。:现在的标准是使用::first-letter
(双双冒号代替单双冒号),但为了最好的向后兼容性,只使用一个双冒号)
输出应该是:
I
�
�
你可以修改
<?php
header("Content-Type: text/html; charset=utf-8");
当前你的源代码是UTF-8格式,但浏览器将其解释为Windows-1252。
你可以做$first_char = mb_substr($string, 0, 1, "UTF-8");
来完成你的问题
您最好对容器元素应用:first-letter伪类。所有主流浏览器都支持它,并且不会弄乱HTML。例如,如果您有一个列表,其中的项目如下:
<ul>
<li>First db term</li>
<li>Second db term</li>
</ul>
将首字母CSS应用于每个li元素,如:
ul li:first-letter { font-size: 3em }