

htmlsimpledomでスクレイピングによって要素を取得し、  
PDOで文字列をmysqlにinsertすると下記のように文字化けします。

[code]

    &#12486;&#12451;&#12501;&#12449;&#12540;&#12523; &#38651;&#27671;&#12465;&#12488;&#12523; &#12300;&#12450;&#12503;&#12524;&#12471;&#12450; &#12503;&#12521;&#12473;&#12301; &#12467;&#12531;&#12497;&#12463;&#12488;&#12514;&#12487;&#12523; &#12459;&#12501;&#12455;&#12458;&#12524; 0.8L BF805170
    
[/code]

どのように改善すべきでしょうか。  
詳しい方、いらっしゃいましたら、ご教示ください。よろしくお願い致します。

文字化け対策としては、以下のように設定していますが、ダメなようです。

[code]

    <?php
    mb_language('ja');
    mb_internal_encoding('UTF-8');
    mb_regex_encoding('UTF-8');
    header('Content-Type: text/html; charset=UTF-8');   
        try {
            $dbh = new PDO(DSN, DB_USER, DB_PASSWORD);
            $stmt = $dbh -> query("SET NAMES utf8;");
        } catch (PDOException $e) {
            echo $e->getMessage();
            exit;
        }
    
[/code]

挿入している要素はvar_dumpで確認すると(string)になっているので、文字列で間違い無いです。


CC BY-SA 3.0
2016-01-25T07:52:33.397
21286
2016-01-25T14:47:21.390
8619
question
php mysql pdo
mysqlに挿入すると文字化けする


&#12486;は文字化けではなくHTMLで使われる「数値文字参照」という文字の指定方法です。

試してないですが、[html_entity_decode](http://php.benscom.com/manual/ja/function.html-
entity-decode.php)で数値文字参照を元に戻せるようです。

* * *

ところで、PHP+MySQLにおいてデータベースの文字エンコーディングを指定する場合、SET NAMESを使用するのは好ましくありません。

どのように指定したらよいかは <http://blog.tokumaru.org/2011/08/pdo.html> が参考になります


CC BY-SA 3.0
2016-01-25T14:26:17.147
21305
2016-01-25T14:47:21.390
2016-01-25T14:47:21.390
5793
5793
21286
answer