2016-10-31 20 views
0

私がéを置き換えると、それはéに変わります。 PHPとHTMLでUTF-8エンコーディングを使用しています。私は関数に、関数に入れた文字のHTMLコードを返すようにします。PHPの特殊文字が関数を置き換えます

function ctrlspecialchars($subject){  
$search = array("<",">","é","à","â","ä","æ","ç","è","ê","ë","ï","î","ò","ó","ô","ö","ø","ù","ú","û","ü","©","®","«","»","¼","½","¾","±","§","¥","£","{","}","$","%"); 
$replace = array("&lt;","&gt;","&#233;","&#224;","&#226;","&#228;","&#230;","&#231;","&#232;","&#234;","&#235;","&#239;","&#238;","&#242;","&#243;","&#244;","&#246;","&#248;","&#249;","&#250;","&#251;","&#252;","&#169;","&#174;","&#171;","&#187;","&#188;","&#189;","&#190;","&#177;","&#167;","&#165;","&#163;","&#123;","&#125;","&#36;","&#37;"); 

return str_replace($search,$replace,$subject); 
} 
+0

疑問符アイコンが表示されますか? – user2879055

+0

é - >これらの兆候。私は文字でéを書式で送信しましたが、置き換え機能を使用すると正しい文字が得られます...しかし、私はthaを置き換えたい – FreeSpirit

+0

...しかし、その文字を - >&#233; まだデータベースに保存されていません。 – FreeSpirit

答えて

0

文字セットお試しください:ISO-8859-1の代わりにUTF-8をしたり、HTMLヘッダーに文字セットを設定してください:

PHP : header('Content-type: text/html; charset=utf-8'); 
HTML: <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
+0

HTML 5はを使用しますが、、 ( 'Content-type:text/html; charset = utf-8'); utf8_encode(...)も使用できます。 私は何時間も検索し、解決策をインターネットで検索し、他の人がこの問題について語ったことを参照してください。何も動作しません。 – FreeSpirit

+0

置き換え機能の後に私に ©を与えます – FreeSpirit

+0

関数への入力も正しいと確信していますか? ?たぶん文字のいずれかの関数のパラメータを変更し、それが動作するかどうかを確認してください。 – user2879055

0

私はあなたのコードをコピーして、それは私の中に正常に動作しますので、ローカル環境では、問題はコード内にあってはならず、実際にはエンコーディングでなければなりません。

私はあなたのエンコーディングの必要性を知りませんが(一部のページでは特殊文字を印刷する必要があるかもしれませんが)、テストのためにシステムのすべての部分をUTF-8で使用してください。 @ user2879055の回答のヒントにしたがって、utf8_general_ciを使用するようにデータベースを設定し、PHPファイルがUTF-8でエンコードされていることを確認してください。

私のエディタ(私はAtomを使用しています)のイメージをUTF-8でファイルをエンコードするように設定しました。ほとんどのエディタは、同様のタイプの構成を持っています。エディタにUTF-8の2つのオプション(BOMありとなし)がある場合は、BOMなしで選択します(情報here)。あなたは、Apacheを使用している場合

atom configuration

最後に、あなたの.htaccesに行IndexOptions +Charset=UTF-8を追加します。

これらのテストでは、utf8_encondingおよびutf8_decodeファンクションの使用は避けてください。

動作したら、各ステップのエンコーディング設定を元に戻してテストして、コードが再び失敗したときにどこに問題があるかを知ることができます。これで、環境のニーズに合わせて環境を設定し、問題のある部分だけで作業できます。

私はvar_dump(ctrlspecialchars("<ó äî ò æ ç % ®>"));であなたの機能を使用しており、私のブラウザは/var/www/html/replace.php:10:string '&lt;&#243; &#228;&#238; &#242; &#230; &#231; &#37; &#174;&gt;' (length=61)です。

+0

データベースがなくても、私はそれらの奇妙な兆候を得るので、テストとしてページにしか印刷されません!問題はデータベース(まだ)ではなく、ページのエンコーディングです。私はまだ私のPC上のlocalhostにいる。私は最初にそれを試してみよう。 – FreeSpirit

+0

Dbはutf8_general_ciとphpページに変換され、.htaccessファイルにも変換されます。同じ奇妙な兆候。 私はヨーロッパに住んでいるので、私はこれらの特殊文字が必要です。私たちはオランダ語でいくつかのフランス語を使用しています。 – FreeSpirit

+0

これは本当に奇妙です...あなたはすでに 'print_r(htmlentities(ctrlspecialchars(" <óäîòæç)のような[htmlentities](http://php.net/manual/pt_BR/function.htmlentities.php) %®> "))));またはそれに類するもの? – James