« MovableType | メイン | Webサービス »

2009年9月26日

Services_Twitterで投稿が文字化けする

注意:version0.30です。

twitter関連のPEARライブラリ「Services_Twitter(作者が日本人じゃない方)」を使って、twitterに投稿すると文字化けする。ハマったので、メモ。


Twitter.phpの566行目付近の

if ($pType == 'string' && !$this->isUnicode($arg)) {
  // iso-8859-1 string that we must convert to unicode
  $arg = utf8_encode($arg);
}

utf8_encodeの処理をしている行をコメントアウトすればOK。

コメントの通り、元の文字コードがiso-8859-1であるという、豪快な決めうちっぷり。。

2008年3月20日

PHPで特定の文字より前にある文字列を得る

指定した文字列の中で、特定の文字より後ろの文字列を返してくれる関数として「strstr」がありましたが、PHP6から特定の文字より前にある文字列を返してくれるフラグが追加されているようです。

string strstr  ( string $haystack  , string $needle  , bool $before_needle  )

のように、第3引数にtrueを指定すればOKで、前後ともに最初に現れる場所が基準となっています。

確かに使う場面が多い割には、今までPHPの関数として用意されておらず、「substr + strpos」の組み合わせか正規表現を使っていましたが、PHPのバージョンの制約を考慮しなければ便利になりました。

しかし、大文字・小文字を区別しない「stristr」という関数がある一方で、新しい関数ではなく既存の関数でのフラグのオン・オフで済まそうとするのは微妙な話です(個人的には逆だと思うのですが)。ただでさえ、haystackとneedleの位置が関数によってバラバラなPHPなので、またややこしくなる原因にもなりそうです。

2007年12月25日

PHPで文字列の接頭辞判定

文字列の接頭辞(prefix)を判定したい時が頻繁にあるのですが、PHPには該当する関数がありません。JavaのStringクラスにはstartsWithというboolean型のメソッドがあるのですが。

こんな感じでしょうか。

class StringUtil{
	/**
	 * 文字列が特定の接頭辞から始まるか
	 * 
	 * @param string $str 文字列
	 * @param string $prefix 接頭辞
	 * @return boolean
	 */
	public static function startsWith($str, $prefix){
		return (strpos($str, $prefix) === 0) ? true : false;
	}
}

if(StringUtil::startsWith($str, $prefix)){
echo 'YES!';
}

PHPは文字列はオブジェクトではないため、動詞と前置詞の配置的にはあまり良くないのかもしれませんが、一番のメリットは、誰かがコードを見て、何をしているのかがすぐに分かるということでしょうか。

2007年12月 9日

なぜか改行コードでexplodeできない時

ボケーっとコーディングしていると、たまにハマってしまいます。

改行コードごとに文字を区切りたい場合、よく使うかと思いますが、改行コードはダブルクオートで括らなければだめですね。

$foo = explode('\n', $bar); //×
$foo = explode("\n", $bar); //○

重要なことの割に軽視されがちですが、シングルクオートとダブルクオートの違いや、ヒアドキュメントについて、ちゃんと復習して、適切な場所で適切な引用符を使いましょう。

PHP マニュアル 文字列について