8

我有一个奇怪的问题,我不知道如何解决它。我想获取从数据库中获取的文本字段的第一个字符。有了这个角色,我会应用一个 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?";

或者也许 CSS3 有更好的方法来做到这一点。

4

3 回答 3

15

请参阅mb_substrhttp://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 */ }

(Ps:现在的标准是使用::first-letter(双双冒号而不是单双冒号),但为了获得最佳的向后兼容性,只使用一个双冒号)

于 2013-04-19T22:33:40.210 回答
1

输出应该是:

I

�

�

你可以通过这样做来解决这个问题

<?php
header("Content-Type: text/html; charset=utf-8");

目前您的源代码为 UTF-8,但浏览器将其解释为 Windows-1252。

然后,您可以$first_char = mb_substr($string, 0, 1, "UTF-8");完成您的问题。

于 2013-04-19T22:39:50.767 回答
1

您最好将 :first-letter 伪类应用于容器元素。它受到所有主要浏览器的支持,并且不会弄乱您的 HTML。例如,如果您有一个包含以下项目的列表:

<ul>
     <li>First db term</li>
     <li>Second db term</li>
</ul>

您将第一个字母 CSS 应用于每个 li 元素:

ul li:first-letter { font-size: 3em }
于 2013-04-19T22:40:00.703 回答