2013-04-19 13 views
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]; 
?> 

意志出力上記のコード:

私は

Ã

Ã

フランス語の文字が複数のバイトを使用しているようですn文字列。問題は、すべての私の文章がフランス語の文字で始まるわけではないということです。この

$str_fr = "<span class='firstletter'>É</span>tais-tu ici?"; 

それとも、これを行うにはCSS3とのより良い方法があるに

<?php 
$str_fr = "Étais-tu ici?"; 
?> 

:誰もが私はこれを変換する機能を持っている可能性がどのようにアイデアを持っています。

+2

あなたを:

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

あなたは、各li要素に最初の文字のCSSを適用します。たとえば、あなたは、などの項目のリストを持っている場合また、[ジョエルの「すべてのソフトウェア開発者が絶対に最低限必要とする、絶対にUnicodeと文字セットについて知っておく必要があります(言い訳はありません!)」](http://www.joelonsoftware.com/articles/Unicode.html)を読んでみてください。 –

答えて

14

$first_char = mb_substr($string, 0, 1, 'utf-8'); // You may change the forth parameter according to your needed encoding. 

mb_substrは、エンコーディングをrepects、ここで最初の文字を表すすべてのバイトを返しますmb_substrhttp://www.php.net/manual/en/function.mb-substr.php)を参照してください。


CSS3には、最初の文字のみを選択する疑似クラス::first-letterがあります。

例:

あなたのHTMLは次のとおりです。

<p id="french_text">Étais-tu ici?</p> 

次にあなたがでCSS3でそれに対処することができます

p:first-letter { /* Your properties */ } 

(詩:今日では標準が::first-letter(ダブルダブルコロンを使用しています単一の二重コロンの代わりに)、最善の後方互換性のためには二重コロンを1つだけ使用してください)

+0

文字列が使用しているエンコーディングで常にmb_string関数を呼び出す必要があります。さもなければ、コードを試している誰かのための結果は*おそらく壊れています*。 – hakre

+0

@hakreはい、ここで使用されているエンコーディングはわかりません。だから私はインラインコメントだけを追加しました。 (Btw。最近、内部エンコーディングはますますutf-8 ...) – bwoebi

+0

@bwoebiあなたは彼の出力から推論することができます。 UTF-8。 UTF-8でエンコードされた "É"と "À"の最初のバイトは、Windows-1252として解釈されると、Ãとして表示されます。 – Esailija

1

出力はされている必要があります。

I 

� 

� 

あなたは現在、あなたのソースを

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

を行うことによって、UTF-8であることを修正することができますが、ブラウザは、Windows-1252として解釈します。

次に、$first_char = mb_substr($string, 0, 1, "UTF-8");を実行して問題を解決できます。

1

最初の文字の擬似クラスをコンテナ要素に適用することをお勧めします。これは、すべての主要なブラウザでサポートされており、あなたのHTMLを台無しにしません。、PHPのマルチバイト文字列関数を使用して、特定の回答に加えて

ul li:first-letter { font-size: 3em } 
関連する問題