なぜこれが期待どおりに機能しないのですか?
echo str_replace("é","é","Fédération Camerounaise de Football");
結果:
"Fédération Camerounaise de Football"
私は持っていることを期待しています:
"Fédération Camerounaise de Football"
それは間違っている。この文字列は正しくなく、置き換える必要があります。UTF-8でエンコードされているだけです。
あなたがしなければならないのはutf8_decode('Fédération Camerounaise de Football')
です。
Fédération Camerounaise de Football
UTF-8でデータを二重に渡しているため、出力として表示されています。
観察する:
file1.phpをUTF-8形式で保存:
<?php
echo "Fédération Camerounaise de Football";
出力:
カメルーンサッカー連盟
ここで、ブラウザにUTF-8を使用していることを伝えると、コンテンツがまっすぐに表示されます。
file2.phpをUTF-8形式で保存:
<?php
header('Content-Type: text/html; charset=utf-8');
echo "Fédération Camerounaise de Football";
出力:
カメルーンサッカー連盟
完璧です。
しかし、あなたはさらに悪いことをしている。UTF-8でエンコードされた文字列があり、UTF-8でエンコードされたファイルに書き込むことで再度エンコードしています。
file3.phpをUTF-8形式で保存:
<?php
echo "Fédération Camerounaise de Football";
出力:
カメルーンサッカー連盟
なんてめちゃくちゃ。これをstr_replace
次のように修正できるかどうかを確認して、さらに悪化させましょう。
file4.phpをUTF-8形式で保存:
<?php
echo str_replace("é","é","Fédération Camerounaise de Football");
出力:
カメルーンサッカー連盟
ご覧のとおり、「修正」しました。ある種。それがあなたがしていることです。あなたは、変換されているé
にé
あなたのエディタでは、エンコーディングの背後にある本当のシンボルが表示させませんので、あなたがこれを見ていなくても、しかし、ブラウザがありません。
ASCIIでこれをもう一度試してみましょう:
ASCII形式で保存されたfile5.php:
<?php
echo str_replace("é","é","Fédération Camerounaise de Football");
出力:
カメルーンサッカー連盟
魔法!ブラウザは今すべてを取得しました。しかし、本当の解決策は何ですか?上手。PHPファイルに文字列がハードコードされている場合は、Fédération Camerounaise de Football
ひどいことを間違えるのではなく、単に書く必要があります。ただし、別のファイルまたはデータベースからフェッチする場合は、次の2つのコースのいずれかを受講する必要があります。
utf8_decode()
フェッチしたデータを目的の出力に変換するために使用します。
何も変換せずheader('Content-Type: text/html; charset=utf-8');
、UTF-8形式でコンテンツを印刷していることをブラウザに通知するために使用しないでください。これにより、正しく表示されます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加