2009年07月03日


prototype.js の Ajax.Request の encoding パラメータ

Ajax.Request を使って直接サーバーへ POST するテストをしていて、
encoding パラメータは get コマンドでは意味無い事が解りました。
元々使うような引数使って無かったので気づかなかったです。
if (this.method == 'post') {
  headers['Content-type'] = this.options.contentType +
    (this.options.encoding ? '; charset=' + this.options.encoding : '');

  /* Force "Connection: close" for older Mozilla browsers to work
   * around a bug where XMLHttpRequest sends an incorrect
   * Content-length header. See Mozilla Bugzilla #246651.
   */
  if (this.transport.overrideMimeType &&
      (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
        headers['Connection'] = 'close';
}

これからすると、結局 post では、HTTP ヘッダの Content-type に
エンコードが指定されるだけで、内部的には UTF-8 でエンコードされる
事になります。ですから、受け取ったサーバではそのヘッダ情報を元に、
自動変換処理する場合にのみ必要になるだけで、クライアントとサーバ
側で約束ができている場合は全く必要無い事になります。

落ち着いて考えると当たり前なのですが。
toQueryString: function() {
  return this.inject([], function(results, pair) {
    var key = encodeURIComponent(pair.key), values = pair.value;

    if (values && typeof values == 'object') {
      if (Object.isArray(values))
        return results.concat(values.map(toQueryPair.curry(key)));
    } else results.push(toQueryPair(key, values));
    return results;
  }).join('&');
},

posted by at 2009-07-03 15:17 | 小コードコピー | このブログの読者になる | 更新情報をチェックする

2009年06月21日


PHP : リファラチェック

特定の URL からしかアクセスできないようにします。
$Site = false;
$file = file( "URLがリストされたファイル" );
for( $i = 0; $i < count( $file ); $i++ ) {

	# 改行削除
	$target = rtrim( $file[$i] );

	# 空行は無視
	if ( $target == "" ) {
		continue;
	}

	# コメント文字
	if ( substr( $target, 0, 1 ) == ";" ) {
		continue;
	}

	$len = strlen( $target );
	$ref = substr( $_SERVER['HTTP_REFERER'], 0, $len );
	if ( $target == $ref ) {
		$Site = true;
		break;
	}
}



posted by at 2009-06-21 03:14 | 小コードコピー | このブログの読者になる | 更新情報をチェックする

PHP : 右端の文字

$wk = trim( $_POST['graphics'] );
$wk = substr( $wk, strlen($wk)-1, 1 );
if ( $wk != '/' ) {
	$_POST['graphics'] .= "/";
}

タグ:PHP String
posted by at 2009-06-21 02:54 | 小コードコピー | このブログの読者になる | 更新情報をチェックする

PHP : HTMLを表示する為のコードを表示する

データが shift_jis の場合は、euc-jp に変換してから処理して下さい。
$Text = htmlentities( $Text, ENT_NOQUOTES, "euc-jp" );
$Text = htmlentities( $Text, ENT_NOQUOTES, "euc-jp" );

■ 関連する記事
PHP : キャラクタセット変換


posted by at 2009-06-21 02:51 | 小コードコピー | このブログの読者になる | 更新情報をチェックする

PHP : キャラクタセット変換

SHIFT_JIS を EUC-JP に変換

内部コードは、euc-jp と utf-8 でどちらでもOK
( shift_jis は使え無ません )
mb_language( "ja" );
mb_internal_encoding("euc-jp");

$str = mb_convert_encoding( $str, "euc-jp", "shift_jis" );
mb_language( "ja" );
mb_internal_encoding("utf-8");

$str = mb_convert_encoding( $str, "euc-jp", "shift_jis" );
タグ:PHP charset
posted by at 2009-06-21 02:40 | 小コードコピー | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します