2007年5月29日火曜日

 

字句解析 - 連続した ひらがな、カタカナ、漢字、数字、アルファベット の語句ごとに区切る

「すべての漢字を取り出す正規表現」をPHPで試す

記号ごとにテキストを分けようとしたら、全角スペースが混ざると上手くいかなかった。正規表現を調べてたら見つけたので記録として。

参考
phpspot開発日誌
http://phpspot.org/blog/

ラベル: , ,


 

指定した幅で文字列を丸めるプログラム

string mb_strimwidth ( string $str, int $start, int $width [, string $trimmarker [, string $encoding]] )
mb_strimwidth - PHP マニュアル

mb_strimwidth()第一引数str第三引数width の幅 で丸めて返します。
第二引数start は開始位置。
第四引数trimmarker が設定されると trimmarker が丸められた文字列の最後に追加されます。
第五引数encoding は文字エンコーディング(デフォルトは内部エンコーディング)

掲示板の書き込み一覧で最初の何文字かだけ表示させる時などに使えるでしょう。


$str = "The quick brown fox jumped over the lazy dog.";

$str = mb_strimwidth($str, 0, 10, "・・・");

//$strの値:The quick ・・・

もちろん、substr()関数をなどを使って先頭の何文字かを切り出して、末尾に”・・・”を結合しても良いでしょうが一発で実行したい時には便利です。

Javascriptでの実現方法が ソーシャルブックマークに載っていたので書きました。

参考
Windchase
http://d.hatena.ne.jp/Psychs/
PHP マニュアル
http://www.php.net/manual/ja/index.php

ラベル: ,


2007年5月24日木曜日

 

fgetcsv関数を使用した場合の文字化けについて

array fgetcsv ( resource handle,int length [, string delimiter [, string enclosure]])
ExcelCSVファイルから一行ずつ取得し、CSVフィールドを処理する関数。
第一引数:ファイルポインタ、第二引数:フィールドの最大長、第三引数:フィールドの区切り文字、第四引数、フィールドの囲い文字

PHPfgetcsv関数を使ったプログラムを書いていたらCSVファイルの日本語が化けた。
半角文字が先頭にあれば文字が壊れずに正しく表示されるが、実用的でないので調べた。

fgetcsv()関数について

~略~
ここでまず重要なのは最後の「enclosure と delimiter はそれぞれ1文字に限られており、もし1文字を超える文字列が指定された場合は、 最初の文字だけが使われます。」という一文。
~略~
「\t」を「\」と「t」の二文字として判断したりはしません。
次に、「enclosure (フィールド囲い子) パラメータは、別の文字を4番目のパラメータで 指定しない限り、デフォルトではダブルクォーテーショーンマークとなります。」という一文。
私はマニュアルを良く読まずに「enclosureを指定しなければ、フィールドの囲い子は「ない」として扱われると思いこんでいたため(そしてうちのサーバーではそれで問題なく動いてしまっていた)、そのスクリプトを他所様のサーバーで動かすと大量に文字化けが発生してしまいました。
この件の場合、fgetcsv()を使っている箇所は何も弄らずに、データ自体の各フィールドをダブルクォーテーションで括るようにしたところ、無事に意図通りの挙動をするようになりました。

挙動が怪しく、省略可能な区切り文字と囲み文字にもきちんとカンマ(,)ダブルクォーテーション(")を指定した方が良いということ。
文字化けが直らない場合はさらに以下。

文字化け対処方法について
setlocale(LC_ALL, 'ja_JP');

fgetcsv関数を実行する前に上のコードを追加する。すると大分改善されます。
それでも一部文字化けは残りました。fgetcsv関数はに依存する様です。
皆、ぶつかる事らしく以下の解答がありました。

[Re:Re:Re:Re:Re:文字化け対処方法について]

RFC4180(CSV形式のRFC)に準拠したCSVファイルをパースする関数を作りました。 ご参考程度にどうぞ。使い方は既存のfgetcsv関数と同様です。

yossy [3月15日 23:05]

CSVファイルに日本語を使っても文字化けしない関数 fgetcsv_reg
これで解消されました。


 function fgetcsv_reg (&$handle, $length = null, $d = ',', $e = '"') {
   $d = preg_quote($d);
   $e = preg_quote($e);
   $_line = "";
   while ($eof != true) {
      $_line .= (empty($length) ? fgets($handle) : fgets($handle, $length));
      $itemcnt = preg_match_all('/'.$e.'/', $_line, $dummy);
      if ($itemcnt % 2 == 0) $eof = true;
  }
  $_csv_line = preg_replace('/(?:\\r\\n|[\\r\\n])?$/', $d, trim($_line));
  $_csv_pattern = '/('.$e.'[^'.$e.']*(?:'.$e.$e.'[^'.$e.']*)*'.$e.'|[^'.$d.']*)'.$d.'/';
  preg_match_all($_csv_pattern, $_csv_line, $_csv_matches);
  $_csv_data = $_csv_matches[1];
  for($_csv_i=0; $_csv_i<count($_csv_data); $_csv_i++) {
     $_csv_data[$_csv_i] = preg_replace('/^'.$e.'(.*)'.$e.'$/s','$1',$_csv_data[$_csv_i]);
      $_csv_data[$_csv_i] = str_replace($e.$e, $e, $_csv_data[$_csv_i]);
  }
  return empty($_line) ? false : $_csv_data;
}

関連記事

PHPでCSVファイルを読み込み[2007年4月3日]

参考

amethyst-web.org
http://www.amethyst-web.org/
PHPプロ!Q&A掲示板
http://www.phppro.jp/
追記:2010年2月9日
CSV_Iterator - Openpear
CSVファイル(ref:RFC4180)をイテレートするためのクラスです。 外国産の同様のクラスでは、fgetcsvを利用しているため文字エンコード周りで不具合があるのでその点を考慮したものを目指しています。 UTF-16でエンコードされたファイルにも対応しています。

ラベル: ,


2007年5月23日水曜日

 

SQLiteでAUTO_INCRREMENTフィールドを作成する

SQLをある程度扱えることを前提に書いてます。(自分は主にMySQL)


sqlite > CREATE TABLE table_name (
                No INTEGER PRIMARY KEY NOT NULL, 
                data VARCHER(10)
             );

INTEGER PRIMARY KEYを指定すると良い。INTではなくINTEGER
AUTO_INCREMENTはいらない、というか指定するとエラーになる。

sqlite > INSERT INTO table_name VALUES (NULL, 'test');

sqlite >INSERT INTO table_name (data) VALUES ('test');

データの追加は上の通り。
フィールドの属性がNOT NULLでもNULLでうまくいく模様。

ラベル:


2007年5月5日土曜日

 

IEでもa要素以外に:hoverを使う為のスクリプト

IEでa要素以外に:hover擬似クラスを適用させる

IE6以下では、:hover擬似クラスが <a> 以外では適用されません。が、この問題の解決策が紹介されているサイトを発見しました。

紹介されているのが以下のサイト。

Whatever:hover

ページ内のchangesというところに

Version 1.42.060206 (:hover and :active) download | view

という文があるのでそこからダウンロード。
:hover擬似クラスの他に:active擬似クラスも使えるようですね。
サンプルはchangesの上、Examplethe combined exampleというリンク。 自分はその下の:focus擬似クラスも使える Version 2.02.060206 をダウンロードしました。

参考

jmblog.jp
http://jmblog.jp/
Peterned
http://www.xs4all.nl/~peterned/index.html

ラベル: , , ,


2007年5月4日金曜日

 

透過 png 画像(IE6以下未対応)

角丸にチャレンジ - 透過PNG画像+CSS編

    background:transparent url(画像パス) no-repeat 0px 0px;

このtransparentというのがポイントらしい。no-repeatにしてるのは背景画像が繰り返されて透過されなくなるためかな。

transparentについて

※ページのキャッシュ
背景色やボーダーの色にはtransparentという値を設定できます。これは親ボックスの背景色と同じ色を指定していることと同じことであり、あたかも透明色を指定したように振舞います。

ccsのプロパティで値に色をとるものはcolor background-color border-colorなど数多い。~中略~css2からシステムカラーやtransparentも登場しました。

~中略~

システムカラーとは閲覧者のGUI環境、つまりデスクトップの背景色やウィンドの文字カラーと同じ色を使用することでよりアクセシビリティの高いページを作成することが出来ます。

システムカラー

ActiveBorder
アクティブなウィンドウの境界線
ActiveCaption
アクティブなウィンドウのタイトル
AppWorkspace
アプリケーションの背景
Background
デスクトップ背景
ButtonFace
ボタンの表面
ButtonHighlight
ボタンのハイライト
ButtonShadow
ボタンの影
ButtonText
ボタンの文字
CaptionText
タイトルの文字やスクロールバーの矢印、ウィンドウの4隅のサイズ変更ボックスの色
GrayText
選択できない文字の色
Highlight
選択領域
HighlightText
選択領域の文字
InactiveBorder
アクティブではない境界線
InactiveCaption
アクティブではないウィンドウのタイトルバー
InactiveCaptionText
アクティブではないタイトルの文字
InfoBackground
ツールチップの背景色
InfoText
ツールチップの文字
Menu
メニューの背景
MenuText
メニューの文字
Scrollbar
スクロールバーの表面
ThreeDDarkShadow
立体オブジェクトの暗い影
ThreeDFace
立体オブジェクトの表面
ThreeDHightlight
立体オブジェクトの選択時
TreeDLightShadow
立体オブジェクトの明るい影
TreeDShadow
立体オブジェクトの影
Window
ウィンドウの背景
WindowFrame
ウィンドウの枠
WindowText
ウィンドウの文字

参考

jmblog.jp
http://jmblog.jp/

ラベル: ,


 

Google Analytics 導入

Google Analytics
http://www.google.com/analytics/ja-JP/

フリーとしては驚くべき性能を持つGoogleが提供するアクセス解析サービスGoogle Analytics
細かい分析と判りやすいビジュアライズで個人レベルだけでなくマーケティングまで出来る。

国家レベルを超える様な、ネット上の情報掌握に若干恐怖を感じつつも次々と展開される事業の技術は素晴らしい。

残念ながら、そのサポート・ヘルプは一流ブランドの企業には(企業秘密とはいえ)似つかわしくないようだ。

関連

Google AnalyticsのAnalysis、そして滞在時間のウソ
Google Analytics のタグを head に入れる理由は?

ラベル:


This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google