IE8 + jqueryでselect要素を複製(clone)した後にoption要素を編集するとエラーが生じる

jQueryでselect要素をまるっと複製(clone)して、その後に$(this).append(“~~”)$(this).empty().html(“~~”)などでoption要素を編集すると、IEでのみ、かな~りヘンな挙動になり、問題が生じる(Firefox、Chromeでは無問題)。

option要素は正しく追加されているのに、プルダウンを出してみると変更前の表示が残っていて、選択すると新しいデータが反映される・・とか意味わからん現象になる。

↓初期表示は「<option>ほげほげ</option>」としとく。

$(this).empty().append(“<option>うがうが</option>”);としてoption要素を入れ替える。

↓あれ?プルダウンしてみると、変更前の「ほげほげ」になったままで変わってない・・・

↓「ほげほげ」を選択してみると・・・「うがうが」になる・・・いみわからん・・・

ちなみにこの現象はjQuery ver 1.8.1(2012/9/21現在の最新版)でも発生している。原因はわからないんだけど、悪いとしたらjQueryかIEのバグになるんだけど、動きをている限り、たぶんjQueryのバグじゃなくてIEバグっぽいニホイが・・・

ネット上で色々と情報を探ると「jQueryオブジェクトとselect要素(もしくはoption要素)の相性が悪い」という記事が散見されるんだけど「select要素をイジルと必ず~」というもので、どうやらIE6でのバグが原因らしい。

IE8と最新のjQueryではここらへんは解消されている様子。ただし、今回の現象はIE8で「クローンしたselect要素のみ」おかしな現象が起きている。

結論を言うと「select要素から作り直す」と問題が解消された。

いろいろと先達の対策を試してみたのだけど、ダメで、$(this).remove() してからselect要素とoption要素をぜ~~んぶ作り直す。このときはjQueryをフル活用しても問題ない。そうするとIEでも問題なく動作した。

まぁ、原因は今でもさ~~っぱりわからないんだけど、「IE + jQueryオブジェクト + select要素(oprion要素)」は今でも相性が悪いらしい。

ってか、くたばれIE。テメェのせいでどんんだけイラン時間つこうてるかわからん!!

jQueryをつかってHTML文字列を表示させるときにIEで文字化けする

以下の処理を行うときになぜかIEでのみ文字化けする現象にぶち当たった。

A.phpにイベントを仕掛けて

jQueryのAjaxメソッド発動

B.phpにAJAXリクエストをなげて

B.phpでHTMLテキストを生成して

A.phpのAjaxメソッドに戻して

A.php内のボックスに$(~).html(~)でHTMLテキストを描画

なぜかIEでのみ文字化け!! (´;ω;`)

なぜかIEの「ページ→エンコード→自動選択」をONにすると文字化けがおこらない。

ChromeやFirefoxでは文字化けは一切おこらない。

さらに、自分のテスト環境ではおこらず、本番環境でのみ発生する。

おそらく、ApacheかPHPの設定が異なるために起こっているのだと思う。

(詳細はしらべてないのでシラネ)

ってことで早速Google先生をシバキ倒してみたら、↓に答えのヒントを書いてくれているエロいひとを発見。

感謝感謝。

ズバリ以下のコードをHTMLテキストを吐く直前に書いてやればいい。

header(“Content-type: text/html; charset=UTF-8”);

前述のヒトはJSONデータでお困りだったようだけど、今回は「text/html」なので、そこらへんを修正ってことね。

以上、めでたし、めでたし。

超有名インターネットラジオ「AccuRadio」がAndroidにねぇぞとお嘆きのあなた「SKY.FM Internet Radio」が最高っす

言いたいことは表題で言っちゃったんで特にないんだけど、この「SKY.FM」って「AUDIOADDICT INC」って会社がやってて、ここのアプリって総じて評価が高い。

おれも「SKY.FM」以外にも「Jazz Radio」ってのを使ってる。「Jazz Radio」ってのは「SKY.FM」よりももうちょっとJAZZのジャンルをふやした同じようなアプリ。こっちもかなり使い勝手がいいからおすすめ。たぶん、課金すると広告が消えて音質の良いものが配信されるんだと思う。まぁイラねぇけど。

ってか、なんで「AccuRadio」はAndroid版つくらないのかね?

CakePHP2.0でDBに接続できない。いきなりすぎてちょっとムリ。

Windows+Apache+MySQL+PHP+CakePHP2.0(XAMPP環境+CakePHP2.0)でCakePHPからデータベースに接続しよーって時にいきなりつまずいた。

./[caleフォルダ]/app/Config/database.php

public $default = array(
‘datasource’ => ‘Database/Mysql’,
‘persistent’ => false,
‘host’ => ‘******’,
‘login’ => ‘username’,
‘password’ => ‘password’,
‘database’ => ‘mydatabase’,
‘prefix’ => ”,
‘encoding’ => ‘utf8’,
);

をシコシコと書いて、DBとテーブル用意して、いざポチッ!!

ど~ん。

Cake is NOT able to connect to the database.
Database connection “Mysql” is missing, or could not be created.

ああ~ん?

ふざけんなコラー!!

ほかのPHPアプリから問題なく接続できてるんじゃボケー!!

アホなんはお前じゃー!!

ってことでググってみたら、↓にズバリ答えを書いてくれているエロい人がいた。

しそうち寂聴 のブログ:CakePHP2.0⇒MySQLへの接続
http://sisomoti.blog76.fc2.com/blog-entry-27.html

ぶっちゃけると、「あんたのPHP環境にPHP Data Objects(PDO)がないよ~ん」ってことらしい。

さっそく「ごおgぇ先生」にお伺いしてみると・・・・

PHP Data Objects のインストール手順
http://www.php.net/manual/ja/pdo.installation.php

に↓しろカス。ってことがかいてあった。

「php.ini」の以下のコメントハズシテネ♪

;extension=php_pdo_firebird.dll
;extension=php_pdo_mssql.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll

おk。外した。Apache再起動。もいっかいポチッ!!

ど~ん。

Cake is able to connect to the database.

おしまい。

投稿日:
カテゴリー: PHP技術系

WordPressなどのCMS導入をして失敗する3つのパターン

その1:CMSを入れたら「安い」と思い込んでいる

CMSを導入したことによる運用コストを全く計算していないことを良く見かける。正直、CMSを導入した場合、運用コストが高くつくケースが多い。なぜなら、やりたいことをやろうとすると“システム修正費用(もしくは調整費用)”が思いのほか高くつく。プラグインなどの代替え手段もあることにはあるが、自身の要望にぴったり合ったものなどほとんど無いと思っていい。また、自分にぴったりプラグインなどを探して、修正して、セッティングして、運用までもって行ってくれるような、いわゆる“CMSのプロ”なる技術者は、そこらへんの格安WEB制作屋とは単価が違う。当然高くつく。じゃぁ、システム本体に手を入れようと考えると、前述と同様高くつく。結局高くつく。安価なWEB屋に頼んでもいいのだけど、安かろう悪かろうで失敗は目に見えている。アナタがよっぽどしっかりしていれば話は別だけど。

でもね、“CMSは安い”は間違っていない。じゃあ何が安いのか?安いのは“高機能なWEBサイトを構築する費用が安い”のだ。従来では考えられないような高機能なWEBサイトを構築する際のイニシャルコストを圧倒的に下げ、キックオフ期間を大幅に短縮することができる。そしてランニングコストについて言えば“ある程度知識をもっているWEBマスター”にとってCMSは圧倒的な効果を発揮する。つまり、CMSはIT素人やWEBマスター初心者には絶対に微笑みかけてくれない。

その2:CMSを入れたら「簡単だ」と思い込んでいる

正直、PC操作もおぼつかないようなITリテラシの無い方々にとって、CMSを操作することはかな~~~~りハードルが高い。良い例がある。MS-OfficeのWord。あれ簡単だと思う?見た目は簡単なように見えるけど、ちゃんとした体裁の“文書”を作ろうと思えばかなり難しい。正直なところでもWordで書くよりもHTMLで書いちゃったほうが何倍も簡単だ。それと一緒。

でも、CMSが簡単なのは事実。じゃあ何が簡単なのか?簡単なのは“高機能なWEBサイトを構築するのが簡単”なのだ。プログラムの知識が豊富でなくても、「ちょっと読める」程度で簡単に高機能なWEBサイトを構築することができる。さらにWEBサイト運用ついて言えば「複雑な事を効率的に行う」ことも得意。それは複雑な事を“ちゃんと理解した上で”おこなう場合に限る。前項同様、CMSはIT素人やWEBマスター初心者には絶対に微笑みかけてくれない。

その3:CMSを入れたら「なんでもできる」と思い込んでいる

とりあえず、救いようが無い。

CMSが得意なのは“決められた行動を効率的にこなす”ことだ。自分の思い通りになるのは“決められた範囲”の中に限る。この“決められた範囲”を一歩でも超えたらCMSは容赦なくアナタにコストと期間を要求してくる。ただし、この“決められた範囲”ってのが非常に複雑になっていて、エンジニアによって“決められた範囲”が変わってくるのも困ったものなんだけどね。ただし、言えることは、“決められた範囲”が広く、アナタの要望を寸分違わず理解して、具体化してくれるエンジニアは値段が高い。間違いなく。

【モバイル回線使用限定】スマホでradikoのエリア判定を切り替える方法

<前提条件>

  • モバイル回線(WiMAX,イーモバなど)のWiFiに接続されている。
  • 東京地域以外の場所にいる。

<手順>

  • 1)radikoが起動しているならプロセスキルする。
  • 2)「設定→位置情報サービス→radiko.jp→オフ」にする。
  • 3)radiko再起動。
  • 4)選局しなおす。

<注意点>

  • WiMAXでしかテストしていません。ほかのモバイル回線でも可能だと思います。
  • iPod touchでしかテストしていません。たぶんiPhoneやAndroid機でも可能だと思います。
  • テストしたエリアは大阪⇔東京です。
  • radiko再起動の選局で切り替わらない場合は、GoogleマップのWiFi位置情報検索などで位置情報を特定しておいてあげるとスムーズかと。

go-pear.phpでのインストールがエラーで失敗する件

PHPのリポジトリファイルがなくてgo-pear.phpでのインストールがエラーで失敗する件について。

ロリポップにPEARをインストールしてやろうと思い、gp-pear.phpでWEBインストールを試みた。

しかし・・・・

An Exception Has Occurred

Unknown location: /pear/pear-core/branches/PEAR_1_4/PEAR.php

HTTP Response Status

404 Not Found

ok

Bootstrapping Archive/Tar.php…………(remote)

Fatal error: Class ‘PEAR’ not found in /home/users/*/****/web/pear/temp/Archive/Tar.php on line 58

となりあえなく撃沈。

どうやら、114行目の

http://svn.php.net/viewvc/pear/pear-core/branches/PEAR_1_4/PEAR.php?view=co

が「404 Not Found」な様子。

このリポジトリをのぞいてみたら

You tell them where to go! (find pear-core @ github).

となってるじゃねぇか。

ふざけんな。

ん?「(find pear-core @ github)」とな?

githubにあるんかいな?と漁ってみたら↓にあった。

https://raw.github.com/pear/pear-core/master/PEAR.php

ついでに調べると

http://svn.php.net/viewvc/pear/pear-core/branches/PEAR_1_4/Console/Getopt.php?view=co

も「404 Not Found」。

ふざけんな。

こっちはもgithubにあるんか?

みあたらない・・・・

http://svn.php.net/を漁ってみたら、古いんだか新しいんだかしらんが、とりあえずあったのでぶち込んでみる。

http://svn.php.net/viewvc/pear/packages/Console_Getopt/tags/Console_Getopt-1.3.1/Console/Getopt.php?view=co

実行。

Bootstrapping Archive/Tar.php…………(remote)

Fatal error: Class ‘PEAR’ not found in /home/users/*/****/web/pear/temp/Archive/Tar.php on line 58

ふざけんなぁぁぁ~~~~っっっっっ

本家(http://pear.php.net/manual/en/installation.getting.php)をみたら、

どうやら去年末からこの状態で放っておかれているようす。

ふざけんなぁぁぁ~~~~っっっっっ

_| ̄|○

追記:2012/3/29

エロい人が修正版go-pear.phpを作ってくれている模様。詳しくは↓を良く読み、平身低頭、禿げしく感謝して使用するように。

http://d.hatena.ne.jp/tdoi/20111228/1325054820

投稿日:
カテゴリー: PHP

Google Chrome の Flash player で日本語入力ができない問題の解決策

俺はChrome愛用者なのだけど、ニコ動などのFlashアプリに日本語入力ができなくなっていた(いつからか、はわからないけど、ずいぶん前から)。

んでググってみたら、↓のような記事を発見。

どうやら既知の問題らしい。

原因をザックリ説明すると「chromeの中に2つのFlashが混在しており、chromeがデフォルトで内包しているほうが悪さをしている」とのこと。したがって、chromeがデフォルトで内包しているFlashを無効にしてやればいい。

やり方は前述のサイトに詳しく書かれており、その通りにやったら問題解決した。

ってかFlashをインストールできない初心者の為に親切心でFlashを内包してくれるんだと思うけど、こんな不具合があったら逆に混乱するよね。ってかFlashをアップデートしたら内包してるやつに上書きしろよ。もしくは勝手に無効にしとけ、ksg。

JavaScriptのsubstrメソッド第1引数はIEでは負数を指定できない。

Javascriptの文字列抽出メソッドであるsubstrメソッドやsubstringメソッドでは第1引数に負の値(負数)を指定すると、文字列の後ろからカウントする仕様になっている。しかし、IEでは、第1引数に負数を指定しても「0」とされてしまい、他のブラウザと挙動が異なり、エラーとなってしまう。

結論を言えばこれを回避するためにはsliceメソッドを使う。もしくはsliceメソッドをメソッドチェーンして複数回を組み合わせる。

“ABCDEFGH”.substr(-4.2)

の場合、IE以外では”EF”となるがIEでは”AB”となってしまう。

そこで、IEでも”EF”を得たい場合には、

“ABCDEFGH”.slice(-4).slice(-2)

とするとIEでも”EF”を得ることができる。

詳しい事は↓で紹介してくれているので見てほしい。

Gladinet Cloud Desktop が Dropbox的でイイ感じかもしれない。

窓の杜なんかで紹介されていたクラウドスペースやオンラインディスク、FTPなどを自分PCのローカルドライブとしてマウントできちゃうソフトです。

これが意外とDorpbox的でなかなかヨサゲ。

というのは、

まず一つ目は、PCを起動したら自動的にマウントしてくれる。

二つ目は、ファイルを変更したら自動的に同期をとってくれる。

三つ目は、FTPを含め色々なサービスをマウントできる。

インターネット環境には常時つながっているけど、WEBアプリの開発環境を用意できない、とかそういう場合にかなり便利。格安のレンタルサーバとか普通にapache+MySQL+PHPがインストールされているし、FTPも解放されている。だからGladinet Cloud DesktopでFTP接続してマウントしてしまえば、開発環境の出来上がり。デバッグしたければ xdebug をONにすればいい(ロリポップにはxdebugが入ってる)。わざわざコーディングしたファイルをFTPでアップする、なんて作業しなくていい。

う~ん、イイ感じ。

ダウンロードはここから↓。
http://www.gladinet.com/p/download_starter_direct.htm

インストールは・・・適当でおk・・不安ならここらへん↓みればおk。
http://freesoft-100.com/pasokon/gladinet-cloud-desktop.html