2chトリップを変換するfilterKey2Trip

2ちゃんねるのトリップを変換する関数filterKey2Tripをまとめました。phpです。

UTF-8、EUC-JP、Shift_JISで確認済みです。EUC-JPの場合のみPHP versions 5.2.1以上が必要です。

マルチバイト対応 str_replaceのmb_str_replaceを
mb_str_replace (mb_replace) – fetus
http://fetus.k-hsu.net/document/programming/php/mb_str_replace.html
から持ってくる必要があります。

/**
 * filterKey2Trip
 *
 * 「name#key」を「name ◆trip」に変換するフィルタです
 * 同時に◆(\x81\x9f)を◇(\x81\x9e)に変換します
 * PHP versions >= 5.2.1
 *
 * Copyright (c) 2008 sanemat
 *
 * @param   string   $beforeFilter  変換前文字列
 * @param   string   $useEncoding   変換前文字列の文字エンコーディング 省略時はUTF-8
 *                                  UTF-8なら'UTF-8', EUC-JPなら'cp51932',
Shift-JISなら'SJIS-win'
 * @param   string   $tripEncoding  トリップ変換時の文字エンコーディング 省略時はSJIS-win(通常SJIS-win)
 * @return  string   $afterFilter   変換後文字列
 * @license http://www.opensource.org/licenses/mit-license.php The MIT License
 * @link    http://sane.justblog.jp/blog/2008/01/2chfilterkey2tr.html
 *
 *
 * mb_str_replace
 * マルチバイト対応 str_replace
 * @version     Release 2
 * @author      HiNa (hina@bouhime.com)
 * @copyright   Copyright (C) 2006-2007 by HiNa(hina@bouhime.com).
 * @link
http://fetus.k-hsu.net/document/programming/php/mb_str_replace.html
 *
 * 参考
 * ◆ 全サーバトリップ統一作戦
 * http://qb3.2ch.net/test/read.cgi/operate/1067245837/
 * XOOPS Cube日本サイト - BluesBBにトリップ機能を!
 * http://xoopscube.jp/modules/xhnewbb/viewtopic.php?topic_id=246&forum=2
 **/
function filterKey2Trip($beforeFilter, $useEncoding = 'UTF-8',
$tripEncoding = 'SJIS-win')
{
       $afterFilter = '';
       mb_convert_variables($tripEncoding, $useEncoding, &$beforeFilter);
       $beforeFilter = mb_str_replace("\x81\x9f", "\x81\x9e",
$beforeFilter, $tripEncoding);
       if(preg_match('/([^#]*)#(.+)/', $beforeFilter, $match)) {
               $salt = substr($match[2]."H.", 1, 2);
               $salt = preg_replace("/[^\.-z]/", ".", $salt);
               $salt =
strtr($salt,"\x3A-\x40\x5B-\x60\x00-\x2D\x7B-\xFF","A-Ga-f.");
               $trip = substr(crypt($match[2], $salt),-10);
               $afterFilter = $match[1]."\x20\x81\x9f".$trip;
       }else{
               $afterFilter = $beforeFilter;
       }
       mb_convert_variables($useEncoding, $tripEncoding, &$afterFilter);
       return $afterFilter;
}

関連
◆ 全サーバトリップ統一作戦
http://qb3.2ch.net/test/read.cgi/operate/1067245837/
XOOPS Cube日本サイト – BluesBBにトリップ機能を!
http://xoopscube.jp/modules/xhnewbb/viewtopic.php?topic_id=246&forum=2
2chトリップを吐き出す関数 – ?D of K
http://d.hatena.ne.jp/ofk/20070303/1172911262
fixed-area :: [PHP] 2ちゃんねるトリップ算出関数
http://www.fixed-area.com/blog.php?id=8

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中