ここで多くの回答を読んでいますが、何を試しても、これを修正する方法がわかりません。
問題
データベースにインポートされているデータがあります。このデータには、' “ ” - é などの特殊文字があります (ただし、これらに限定されません)。
データが表示されると、それらは黒いひし形として表示されます。
私が試したこと
私はこれに従いました: http://kunststube.net/frontback/しかし、インポートを行うと、最初の ' で壊れ、残りの文字列は無視されます (まだ正しく挿入されます)。
で文字列を変換しようとしましたが、すべてをutf8_encode()
試しhtmlentities()
てみましmb_convert_encoding()
たが、実際には問題を完全に解決しません。一部の文字を削除したり、IE で四角形を与えたりするものもあります。
私が問題だと思うのは
問題は元のエンコーディングがわからないことに関係していると思うので、実行mb_detect_encoding()
しても何も返されません。それはどういう意味ですか? エンコーディングを検出できないと思います。
だから私が苦労しているのは、文字列を壊さずにutf8にエンコードして、適切に保存できるようにする方法です。
観察
設定header('Content-Type: text/html; charset=utf-8');
すると黒いひし形が表示されますが、設定header('Content-Type: text/html; charset=ISO-8859-1');
すると正しく表示されます。
それを知っているので、ウェブサイト全体を ISO-8859-1 で表示するか、その文字列をutf8に変換する必要があります..これを行う方法に好みはありますか?
DB が latin1 で、PDO 接続に文字セットを含めなかった場合、データはデータベースに正しく保存されました
他の
PDOを使用しています
new PDO("mysql:host=" . $G['PDO_HOST'] . ";dbname=" . $G['PDO_DB'] . ";charset=utf-8", $G['PDO_USER'], $G['PDO_PASS'],array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
問題のある文字列のコピー:
Informed by his eclectic background and varied passions for décor, travel, entertaining and food, Nathan Turner’s American Style will appeal to readers looking to incorporate Turner’s stylish and relaxed aesthetic into their home and life.
これに関するご意見をいただければ幸いです - これについてしばらく苦労してきました
アップデート
これが私のテーブルです
CREATE TABLE IF NOT EXISTS `page` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`url` varchar(255) NOT NULL,
`summary` text NOT NULL,
`content` text NOT NULL,
`search` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=937 ;
したがって、テーブルは utf8 形式です。
DB 接続を次のように変更しました。
$dbc = new PDO("mysql:host=" . $G['PDO_HOST'] . ";dbname=" . $G['PDO_DB'], $G['PDO_USER'], $G['PDO_PASS']);
$dbc->query("SET NAMES utf8");
「あなたの常識」がPHPバージョンについて指摘したように。
しかし、これですべての設定が完了しました。最初の '</p> でインサートをカットします。
弦:With a style that is accessible and chic, Turner’s aesthetic is Nate meets Colin and the Magazine.
保管:With a style that is accessible and chic, Turner
更新 2
私は準備されたステートメントを使用しています..壊れているコンテンツは次のとおりです。
$stmt->bindParam(':content',$content, PDO::PARAM_STR);