获取字符串的第一个字符,即法语口音


Get first character of a string, that is a French accent

我有一个奇怪的问题,我不知道如何解决它。我想得到一个文本字段的第一个字符,我从数据库中得到。对于这个字符,我将应用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 }