2012-05-18
CodeIgniterでURLにコンマ(,)を使えるようにする
CodeIgniterのデフォルトでは、以下のようなコンマ(,)を使ったURLは利用できません。
An Error Was Encountered
The URI you submitted has disallowed characters.
config.phpのpermitted_uri_charsに利用したい文字を追記することでエラーを回避できます。
$ vi /application/config/config.php <?php /* |-------------------------------------------------------------------------- | Allowed URL Characters |-------------------------------------------------------------------------- | | This lets you specify with a regular expression which characters are permitted | within your URLs. When someone tries to submit a URL with disallowed | characters they will get a warning message. | | As a security measure you are STRONGLY encouraged to restrict URLs to | as few characters as possible. By default only these are allowed: a-z 0-9~%.:_- | | Leave blank to allow all characters -- but only if you are insane. | | DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!! | */ //$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'; $config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-,';
次に、入力クラスでは、許可されていない文字がキー名に使われることを許可していません。
Disallowed Key Characters.
同様にコンマ(,)を追記します。
このエラーは、<input>タグが正しく書かれていない場合にも表示されるようですね。
$ vi /system/core/Input.php <?php // -------------------------------------------------------------------- /** * Clean Keys * * This is a helper function. To prevent malicious users * from trying to exploit keys we make sure that keys are * only named with alpha-numeric text and a few other items. * * @access private * @param string * @return string */ function _clean_input_keys($str) { // if ( ! preg_match("/^[a-z0-9:_\/-]+$/i", $str)) if ( ! preg_match("/^[a-z0-9:_\/-,]+$/i", $str)) { exit('Disallowed Key Characters.'); } // Clean UTF-8 if supported if (UTF8_ENABLED === TRUE) { $str = $this->uni->clean_string($str); } return $str; }
http://stackoverflow.com/questions/4197976/codeigniter-disallowed-key-characters
2012-03-06
Rubyから手軽にTwitterへ投稿する
随分前に書いたRubyからTwitterへ投稿するネタですが、
Twitterライブラリの仕様が変わっていました。
あと、アクセストークン等がTwitterのデベロッパーサイト上でそのまま取得できますね。
#! /usr/bin/ruby require 'rubygems' require 'twitter' require 'date' # 例えば、時間を付けて同じ文言による連投エラーを避ける。 date = Time.now.strftime("%H:%M:%S").to_s message = "OAuth test." Twitter.configure do |config| config.consumer_key = 'Consumer key' config.consumer_secret = 'Consumer secret' config.oauth_token = 'Access token' config.oauth_token_secret = 'Access token secret' end client = Twitter::Client.new # ツイート! client.update(date +" "+ message)
2012-03-04
Safari 5.2でGoogle Readerを利用する簡易機能拡張を作りました
現時点で、Safari 5.2 Preview版にはRSSへ追加する機能がありません。
RSSフィードを表示後、ツールバーのボタンを押すことでGoogle ReaderにアクセスするSafari機能拡張を作りました。
2012-02-08
CodeIgniterで日本語メールを送ると文字化けする場合の対処方法
CodeIgniterのEmailライブラリで日本語を含むメールを送ると、文字化けする。
システムの文字コードはUTF-8。
CIのライブラリ内にあるEmail::_prep_q_encodingで行われているQ-Encodingが原因らしい。
<?php /** * Prep Q Encoding * * Performs "Q Encoding" on a string for use in email headers. It's related * but not identical to quoted-printable, so it has its own method * * @access public * @param str * @param bool // set to TRUE for processing From: headers * @return str */ private function _prep_q_encoding($str, $from = FALSE) { [...] } /** * Set Email Subject * * @access public * @param string * @return void */ public function subject($subject) { // $subject = $this->_prep_q_encoding($subject); $this->_set_header('Subject', $subject); return $this; }
上のようにEmail::_prep_q_encodingの部分をコメントアウトすれば解決した。
Controller上では、以下のように書けばメールを送信できる。
<?php $from_name = 'admin'; $subject = '登録されました'; $message = "登録が完了しました。\n"; $message .= "http://is0.me/"; $from_name = mb_encode_mimeheader($from_name); $subject = mb_encode_mimeheader($subject); $mail_list = array(); $mail_list[] = 'sample@gmail.com'; $mail_list[] = 'hello@gmail.com'; $this->load->library('email'); $this->email->from('no-reply@is0.me', $from_name); $this->email->to($mail_list); $this->email->subject($subject); $this->email->message($message); $this->email->send(); // error_log($this->email->print_debugger());

