2011-01-21 9 views
8

文字列内のコンテンツを大文字にすることはできますが、その中のHTMLエンティティにはできません。出来ますか?PHP:文字列の大文字を作成しますが、HTMLエンティティは作成しませんか?

$str = 'FUNDA MENTALISM'; 
echo strtoupper($str); 

私はこれを生産したい 、

'FUNDA MENTALISM' 

が、私はほとんどの時間を、私はあなたがあなたのタグにCSSをリストされていない知っているstrtoupper()

'FUNDA MENTALISM' 

答えて

9

でこれを得るが、これをクライアント側に任せておくほうが簡単です(ブラウザの表示にこの文字列のみを使用する場合)。

適用すると、text-transform: uppercase;が適用されます。

+0

はあなたに感謝します!私はそれを考えていたはずです! – laukok

+0

唯一の欠点は、タイトルタグの同じ問題を解決するのに役立たないということです。 –

3

エンティティを削除して、マルチバイト文字セットを使用してください。

$string = html_entity_decode($string, ENT_COMPAT, 'UTF-8'); 
$string = mb_convert_case($string, MB_CASE_UPPER, 'UTF-8'); 

次に、文字列を出力します。ほとんどのhtmlエンティティは必要ありません。ネイティブ文字を使用し、ドキュメントの出力を適切に設定するだけです。

あなたが本当にエンティティを使用する必要がある場合は、正規表現を順に次のとおりです。私は正規表現をテストしていませんが、それは、それはすぐに続いされていない文字を探しているので、動作するはず

$callback = function($match) { 
    return strtoupper($match[1]); 
} 
$regex = '/(\w+(?=&)|(?<=;)\w+)/'; 
$string = preg_replace_callback($regex, $callback, $string); 

注意あなたは結果

$var=<i>This</i><u>is</u><b>test</b><br>New line 

Fたいしまいますより;文字...

+0

正規表現は$ regex = '/ \ w +(?=&)|(?<=;)\ w + /'それが進行している&または文字によって残された文字を探すとき。私はまた、$ match [1]のインデックスは$ match [0]であるべきだと思いますか? – Marcin

+0

@Marcin:ありがとう、私はその正規表現を編集しました。そして、私は '[1]'を意味しましたが、元の文字クラスをサブパターンにラップすることも意味しました... – ircmaxell

1

第1デコードよりも大文字に文字列を変換することをお勧めしますstrtoupper($var);出力大文字の慰めは

<I>THIS</I><U>IS</U><B>TEST</B><BR>NEW LINE 

関数にhtmlentitiesになります()$var=htmlEntities($var); OUTPUT:

&lt;I&gt;THIS&lt;/I&gt;&lt;U&gt;IS&lt;/U&gt;&lt;B&gt;TEST&lt;/B&gt;&lt;BR&gt;NEW LINE 

FINALエンコーディング$var=html_entity_decode($var); 出力:

THISはIS TEST
NEW LINE

最初のhtmlentitiesが大文字よりも変換される場合。コード化されたテストが大文字に変更され、関数が失敗したため、デコードが失敗します。

1

私はkapaのCSSバリエーションを使用できません。タイトルタグにはこれが必要です。 ircmaxellが提供するソリューションは、右のかもしれませんが、一部のサーバがmbstring拡張子を持っていないので、このソリューションは良いかもしれない:

echo htmlentities(strtoupper(html_entity_decode($str))); 
関連する問題