最近使ってるクラスでも紹介しようと思う。毎度お馴染みのTextsクラス。色々な用途に使うので色々と多機能化してきた感じではある。
class Texts{static $patterns=array(0=>'/&/i',1=>'/</i',2=>'/>/i',3=>'/"/i',4=>"/'/i");}mb_internal_encoding("UTF-8");
static $replacements=array(0=>'&',1=>'<',2=>'>',3=>'"',4=>''');
static $patterns_html=array(0=>'/&/i',1=>'/</i',2=>'/>/i',3=>'/"/i',4=>"/'/i",);
5=>'/\[\[([^(\[\[)(\|\|)(\]\])]*?)\|\|(https?:\/\/[0-9a-z_,.:;&=+*%$#!?@()~\'\/-]+)\]\]/i',
6=>'/([^"])(https?:\/\/[0-9a-z_,.:;&=+*%$#!?@()~\'\/-]+)([^"])/i',
7=>'/\n/'
static $replacements_html=array(0=>'&',1=>'<',2=>'>',3=>'"',4=>''',);
5=>'<a href="$2">$1</a>',
6=>'$1<a href="$2">$2</a>$3',
7=>'<br />'
static $checkEncodeList=array("UTF-8","SJIS-win","SJIS","EUCJP-win","EUC-JP");/**static public function sanitiz($str)
* $strをサニタイジングする関数
* @param $str サニタイジングされる文字列
* @return サニタイジングされた結果の文字列
*/
{return preg_replace(self::$patterns,self::$replacements,$str);}/**static public function toHTML($str)
* $strをサニタイジング+独自の記法からHTMLタグとして値を返す関数
* 記法としては URLをリンク化するのと [[hoge||http://example.com]] をリンク化する。勿論改行をbrタグ化するのも忘れない
* @param $str サニタイジング・変換される文字列
* @return サニタイジング+変換された結果の文字列
*/
{return preg_replace(self::$patterns_html,self::$replacements_html,$str);}/**static public function checkEncoding($str)
* リスト self::$checkEncodeList を元にmb_detect_encodingするだけの関数
* @param $str チェック対象の文字列
* @return チェックされて判った文字コード名 無い場合は falseを返す
*/
{return mb_detect_encoding($str,self::$checkEncodeList);}/**static public function convertToInnerEncoding()
* phpの内部エンコードへ変換する関数 入れる文字のエンコードを指定しない場合はcehckEncodingで自力で調べて返します。
* 分からない時や変換出来ない時は falseを返します。
* @param $str 変換する文字列
* @param $enc 変換する元のエンコード
* @return 変換結果。失敗するとfalseを返す。
*/
{$ine=mb_internal_encoding();}
$arg =func_num_args();
if($arg>0){//第一引数は変換する文字列
$str =func_get_arg(0);}
if(count($str)<1){return false;}
if($arg>1){//第二引数はその変換する前の文字コード$enc =func_get_arg(1);}else
{//無ければ自分でチェックする$enc = self::checkEncoding($str);}if($enc===$ine){
if(!$enc){return false;}return $str;}else{return mb_convert_encoding($str,$ine,$enc);}
文字列をサニタイズしたり変換したりするそんなクラス。使い道は微妙なところではあるが、GETした値のエンコードを揃えるときとかにも使っています。
尚、蛇足だが“UTF-8”
を“SJIS”
に変換する場合や逆の場合に“~”
の様な文字が化けるのだが、その“SJIS”
を“SJIS-win”
にすると文字化けしないそうだ。そのため、うちの文字チェックの順序は“UTF-8”
,“SJIS-win”
,“SJIS”
,“EUCJP-win”
,“EUC-JP”
の様な順となっております。
0 件のコメント:
コメントを投稿