ウブ
/*
転載がある場合は作者を明記してください
著者: He Zhiqiang
ファイル: ubb.php
注: 改善と言われていますが、実際にはコア関数 parse()完全に書き直されており、アイデアも同様に異なります。
ただし、それでも He Zhiqiang の例からインスピレーションを受けており、テスト例や URLCHECK などのいくつかの関数も He Zhiqiang のプログラムに従っています。ありがとう、He Zhiqiang さん。
カラー機能はまだありませんが、追加していきます。
プログラムにバグや不都合がある場合は、メールでお知らせください。
ありがとう!
機能の改善:
文字列の UBB エンコーディング。このクラスは現在、次の単純で実用的なエンコーディングのみをサポートしています:
1. URL リンク
http://www.phpexe.com/
http:// ヘッダーは OK 必要ありません
たとえば、phpexe.com も使用できます。
2. 電子メールのリンク
デモ@163.net
3. 画像のリンク
URL リンクと同様に、前の http はオプションです。
4. 本文
太字
イタリック
下線
タイトル単語 No. 1
...
タイトル単語 No. 6
[tt][/tt]
[s][/ s]
[em ][/em]
[strong][/strong]
[samp][/samp]
[kbd][/kbd]
[var][/var]
[dfn][/dfn]
[cite] [/cite]
以下の点に注意してください:
1. url、email、img などのタグは大文字と小文字を区別しません。
2. タグ内では TAB キーは使用できませんが、スペースは使用できます。
3. このクラスは、htmlencode、htmlencode4textarea、emailcheck 関数、および urlcheck クラスを呼び出す必要があります。
4. 変更後はネストがサポートされますが、url、email、img の 3 つのタグはネストできません。
技術情報:
究極の掲示板
http://www.ultimatebb.com/
UBB コードとは
http://www.scriptkeeper.com/ubb/ubbcode.html
*/
include("urlcheck. php");
include("otherfunc.php"); //これら 2 つのファイルの内容は最後に添付されます。
//ubbcode class
class ubbcode{
var $call_time=0;
//扱えるタグと処理関数の対応表
var $tags = array( //小文字のタグ => 対応する処理関数
'url ' = > '$this->url'、
'メール' => '$this->メール'、
'img' => 'b' = > '$this->シンプル'、
'i' => '$this->シンプル'、
'u' => '$this->シンプル'、
'tt' => this->simple'、
's' => '$this->simple'、
'strike' => '$this->simple'、
'h1' => >シンプル'、
'h2' => '$this->シンプル'、
'h3' => '$this->シンプル'、
'h4' =>シンプル'、
'h5' => '$this->シンプル'、
'h6' => '$this->シンプル'、
'sup' => 、
'サブ' => '$this->シンプル'、
'em' => '$this->シンプル'、
'コード' => '$this->シンプル'、
'samp' => '$this->シンプル'、
'kbd' => '$this->シンプル'、
'var ' => '$this->シンプル'、
'dfn' => '$this->シンプル'、
'cite' => '$this->シンプル'、
' = > '$this->simple',
'big' => '$this->simple',
'blink' => '$this->simple'
// URL 添付ファイル属性
var $attr_url;
//URL 正当性チェック オブジェクト
var $urlcheck;
function ubbcode($attr_url){
$this->urlcheck = new urlcheck(); }
// $str の UBB エンコード解析
関数 parse($str){
$this->call_time++
$parse = ''.htmlencode($str);
$ret = '';
while(true){
$eregi_ret=eregi("[[#]{0,1}[[:alnum:]]{1,7}]",$parse,$eregi_arr) ; //[xx] を検索
if(!$eregi_ret){
$ret .= $parse; // そうでない場合は、 return
}
$pos = @strpos($parse,$eregi_arr[0]) ;
$tag_len=strlen($eregi_arr[0])-2;//タグの長さ
$tag_start=substr($eregi_arr[0],1,$tag_len);
if((($tag=="url") または ($tag=="email") または ($tag=="img")) and ($this->call_time>1)){
echo $this ->call_time."
";
return $parse;// ネストできないタグでない場合は直接リターン
}
$parse2 = substr($parse,0,$pos); // タグの前
$parse = substr($parse,$pos+$tag_len+2);// タグの後
if(!isset($this->tags[$tag])){
echo "$tag_start< br> ";
$ret .= $parse2.'['.$tag_start.']';
continue;// サポートされていないタグの場合
}
// 対応する終了タグを検索
$eregi_ret=eregi ( "[/".$tag."]",$parse,$eregi_arr);
if(!$eregi_ret){
$ret .= $parse2.'['.$tag_start.']'; / /対応する終了タグがない場合
}
$pos=strpos($parse,$eregi_arr[0]);
$value=substr($parse,0,$pos);//これは開始と終了タグの内容
$tag_end=substr($parse,$pos+2,$tag_len);
$parse=substr($parse,$pos+$tag_len+3);// 終了タグの後の内容
if(( $tag !="url") および ($tag!="email") および ($tag!="img")){
$value=$this->parse($value);
$ ret . = $parse2;
eval('$ret .= '.$this->tags[$tag].'("'.$tag_start.'","'.$tag_end.'",". $value .'");');
}
$this->call_time--;
return $ret;
}
function simple($start,$end,$value){
return '<' .$ start.'>'.$value.''.$end.'>'
}
関数 url($start,$end,$value){
$trim_value=trim($値) ;
if (strto lower(substr($trim_value,0,7))!="http://")
$trim_value="http://".$trim_value;
if($this->urlcheck -> ;check($trim_value)) return 'attr_url.'>'.$value.''; else return '['.$start.']'.$value.'[/'.$end.']'
}
関数 email($start,$end,$value){
if(emailcheck( $value )) return ''.$value.'';
else return '['.$start.']'。 $value .'[/'.$end.']';
}
関数 img($start,$end,$value){
$trim_value=trim($value) if ((strto lower(substr( $trim_value ,0,7))!="http://") または ($this->urlcheck->check($trim_value)))
return '';
else return '['.$start.']'.$value.'[/'.$end.']';
}
}
//テスト
echo '';
echo '