Nacky - Snowland.net
Nacky(Issei Ishii)がDJ/Composerのようなふりして書き散らすblogサイト
Jump to navigation
«Prev ||
1 |
2 |
3 ||
Next»
2011-06-16
他のサイトの情報がほしーい
マッシュアップしたーい
みたいな感じで他サイトのデータが欲しいとき.
・環境
CentOS5 + Apache2 + PHP5.1
・必要なもの
php-tidy
pear HTTP/Request2
// ページ取得
require_once "HTTP/Request2.php";
$req = new HTTP_Request2('取得先URL');
$res = $req->send();
$html = $res->getBody();
// tidyで整形
$tidy = new tidy;
$tidy->parseString($html, array('indent'=>true,'output-xml'=>true), 'utf8');
$tidy->cleanRepair();
// xmlとして解析
$xml = new SimpleXMLElement($tidy);
$dat = $xml->xpath('欲しいデータにアクセス');
ということで簡単だったわ!20分ぐらいでできちゃった.
ただ実際には$tidy->cleanRepair()しても の処理がなんかおかしかったので,途中で を削除する処理を入れました.
2011-06-10
PHPでSmartyを3.0.xから最新の3.0.8にしたらエラーが出るようになってしまった.
$_file_to_checkがundefined offsetなどと言われる.
そんなときはCompileDirとCacheDirの中身を一旦消すと良い.
基本のようで忘れていた.
やってみたらあっさり動作.
ちなみにファイルの評価方法の部分が変更になっていたようです.
■
Smarty :: View topic - 3.0.4: undefined offset
2011-04-06
恥ずかしながら本blogのシステムであるNucleusのアップグレードをさぼっておりました.
しかしまぁセキュリティ的なアレやコレやあるみたいなのでアップグレードを行いました.
手順は
・upgradesのスクリプトを実行してDB内容を更新
・overwritesを上書きして完了
簡単.
しかし見てみるとblog記事が盛大に文字化けしてる.
ということで原因調査.
■
通常は大丈夫だがphpMyAdminで文字化け [Archive] - XREA&CORE SUPPORT BOARD
こちらの症状が当てはまります.
原因は昔に作ったMySQLのDBが文字コードlatin1だったため.
DBのエンコーディングがlatin1だと,中身がUTF-8でもSET NAMES utf-8;して扱うと文字化けします.
正しい状態では,DBもutf8指定,中身もUTF-8の文字列となっているはず.
しかし上記の記事にも「ただ、既に作成済みのデータについてはまた一から作り直すしかないかと思っているのですが・・・」とあります.
私も知る限りサクっとlatin1内のUTF-8文字列をutf8に持ってくる方法は知りません.
…じゃぁ自力でやるか.
そんなわけでPHPを書いて移行作業開始.
[Read More!]
2010-09-30
webサイトをUTF-8で作っても,そのシステムから出すメールはISO-2022-JPじゃなきゃいけないようなことがよくあります.
(UTF-8はメーラーが対応してないとかで.いい加減に無くなっていいと思うんだが)
さらにはUTF-8だと表示フォントが変わるので違うとか言ってくるクライアントもいると思います.
で,UTF-8で丸数字(①とか)やカッコ株(㈱)を入力されると,その後メール本文で文字化けが起きます.
ISO-2022-JPだって丸数字とかカッコ株あるじゃーん,と一瞬思ってしまいますが,それは各メーカーの独自拡張です.
そんなわけでPHPでmb_convert_encodingしても文字化けしますし,iconvを通しても特殊文字変換できないよ!と言われて処理が止まります.
じゃぁどうすんのよ…
ということで今回はあらかじめそのへんの文字を変換してしまうことにしました.
㈱ は (株) と書けばいいし,① は (1) で代用することにします.
しかし文字コード表作るの面倒だなーと思ったら,やっぱり既にありました.感謝.
■
UTF-8で変換できない機種依存文字を置換する - memo.xight.org
ただしリンク先のコード '\xE3\x8B\xB0' の部分がシングルクォートなので,ダブルクォートにしないと正しく動きません.
これでもまだ見た目が違っちゃうよ!とかいうクライアントがいたら,がんばって説得しましょう….
参考
■
機種依存文字とUnicode - WebStudio
2010-05-18
文字列一致を見たいのだが,文字列には全角/半角,大文字/小文字,ひらがな/カタカナが含まれている.
これを一括で条件指定したい.
というときの解決法.
(PHP+ PostgreSQL/MySQLを想定)
■1.検索用に別カラムを持っておく
DBにあらかじめ mb_convert_encoding($str,'AcKV') 等で簡易に正規化(?)した文字列を持つためのカラムを作成する.
検索時は変換したカラムに対して指定する.
まぁ,これが楽か.
ただしINSERTもUPDATEも二度手間です.
そういうものだとして実装すれば良いわけですが.
■2.検索時にがんばる
2-1.translateする
translate(upper(str_column),'abc...','abc...') LIKE '%str%'
ただしPostgreSQLにはtranslateがありますがMySQLには無いようです.
アルファベット26文字+ひらがな50音+α…面倒…
2-2.正規表現でがんばる
あらかじめPHPで '(s|S|s|S)(t|T|t|T)(r|R|r|R)' みたいな文字列を作っておいて
str_column ~ '(s|S|s|S)(t|T|t|T)(r|R|r|R)'
とする(MySQLの場合は ~ じゃなくて REGEXP).
いずれにしろコスト高いなー.
■ということで
あらかじめわかっているなら1.のほうが良いですね.
あとはテキスト全文検索で正規化機能を使うとか(というかこれが本命?).ただし標準で入ってないことも多いのでケースバイケース.
«Prev ||
1 |
2 |
3 ||
Next»