2010年7月20日火曜日

PHP + MySQLでの文字化け

解決案その2

データベースに接続した後に
@mysql_set_charset(‘utf8′);
と書く。

<?php
$dsn = "mysql:host=localhost;dbname=データベース名";
if(!$db = new PDO($dsn, "ユーザー名", "パスワード"))
    echo 'connnect error!<br>';
else
    echo 'connnect succes!<br>';
@mysql_set_charset(‘utf8′);
?>

みたい感じ。
はじめは
$db->query("SET NAMES 'UTF8'");
でやってたけど駄目だった。
これでとりあえずは文字化けしなくなった。

でも実は

Warning: mysql_set_charset() [function.mysql-set-charset]: Access denied for user 'username'@'localhost' (using password: NO) in /ディレクトリがつらつらと/db_init.php on line 7

Warning: mysql_set_charset() [function.mysql-set-charset]: A link to the server could not be established in /ディレクトリがつらつらと/db_init.php on line 7

というエラーが出る。
動くんだけどエラー出る。
使わない方がいいよね。
どうしても、という人のみ自己責任でどうぞ。

下記の参考サイトではエラー出てないみたいなんだけどなぁ。
PDOでDBにアクセスしてるからエラー出るんだろうね。
$db->query();
でUTF-8指定できるのあればそれでいけるのかな?

参考サイト
CORE SERVERでMySQLの文字化け

レンタルサーバーにPEARをインストール

環境はCORESERVER。

このサイトが参考になった。
コアサーバーに無事pearをインストール完了

⑤からは以下のように
pear install HTML_QuickForm
などでおk。
あとはDLされて自動的にインストールしてくれる。

2010年7月18日日曜日

wordpressでパーマリンクの設定をするとページが404になり表示されない

パーマリンクをデフォルト以外に設定するとnot found 404になってトップページ以外が表示されな現象。

自動で書き換えられる場合はいいのですが
「.htaccess を更新する必要があります。」
と出てきたら言われたとおり.htaccessに手動でmod_rewriteの設定を書き込んであげる。

大体こんなやつ

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]


んでこれをwp-adminのフォルダの下ではなくて一番上のディレクトリ(このブログならprogramming.lugn-design.com/)に配置する。
これでおkかな?

PHP + MySQL での文字化け

私の環境
PHP + MySQL
サーバーはCORESERVERです。

基礎からのPHPという本の
Part3, Chapter18のList18-2とList18-3で発症。
私は発狂。

大体の流れはHTMLからFORMで送信。
その情報をPHPで受け取りDBにアクセス。
そして対応した情報を取得。
表示したら文字化け。
という流れ。

とりあえずの対応策としてはphpとhtmlの部分に
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta>
<meta content="ja" http-equiv="Content-Language"></meta>
とやっておく。

んでphpファイルにPOSTで受け取る前に以下のコードを追加
mb_language("uni"); //<--追加
mb_internal_encoding("utf-8"); //<--追加
mb_http_input("auto"); //<--追加
mb_http_output("utf-8"); //<--追加

//!< この上に追加
$hoge = $_POST['hoge'];

これでいけました。
理由?
ググッてください(キリッ

参考サイト
PHP+MySQL+UTF-8で文字化け回避