/** * SJIS文字列の末尾が、第一バイトであれば、タグが壊れる要因となるのでカットする。 * * @access public * @return string */ function fixSjis($str) { if (strlen($str) == 0) { return; } $un = unpack('C*', $str); $after_sjis1st = false; $after_crasher = false; foreach ($un as $v) { if ($after_sjis1st) { $after_sjis1st = false; $after_crasher = false; } else { if (StrSjis::isSjis1stByte($v)) { $after_sjis1st = true; $after_crasher = true; } elseif (StrSjis::isSjisCrasherCode($v)) { $after_crasher = true; } else { $after_crasher = false; } } } if ($after_crasher) { $str = substr($str, 0, -1); } return $str; /* // 末尾のみをチェックするためのコード。これでは不足。 if (StrSjis::isSjisCrasherCode($un[$count]) && !StrSjis::isSjis1stByte($un[$count-1])) { $str = substr($str, 0, -1); return $str; } */ }
/** * 名前をHTML用に変換して返す * * @access private * @return string HTML */ function transName($name, $resnum) { global $_conf; $nameID = ''; // ID付なら名前は "aki </b>◆...p2/2... <b>" といった感じでくる。(通常は普通に名前のみ) // ID付なら分解する if (preg_match('~(.*)( </b>◆.*)~', $name, $matches)) { $name = rtrim($matches[1]); $nameID = trim(strip_tags($matches[2])); } // 数字を引用レスポップアップリンク化 // </b>〜<b> は、ホスト(やトリップ)なのでマッチしないようにしたい /* if ($name) { $pettern = '/^( ?(?:>|>)* ?)?([1-9]\d{0,3})(?=\\D|$)/'; $name = preg_replace_callback($pettern, array($this, 'quote_res_callback'), $name, 1); } */ if (strlen($name) && $name != $this->BBS_NONAME_NAME) { $name = preg_replace_callback($this->getAnchorRegex('/(?:^|%prefix%)%nums%/'), array($this, 'quote_name_callback'), $name); } // ふしあなさんとか? $name = preg_replace('~</b>(.+?)<b>~', '<font color="#777777">$1</font>', $name); $name = StrSjis::fixSjis($name); if ($nameID) { $name .= $nameID; } return $name; }
/** * アンカーの正規表現を返す * * @param string $pattern ex)'/%full%/' * @param boolean $unicode * @return string */ public static function getAnchorRegex($pattern, $unicode = false) { if (!array_key_exists($pattern, self::$_anchorRegexes)) { self::$_anchorRegexes[$pattern] = strtr($pattern, self::_getAnchorRegexParts()); // 大差はないが compileMobile2chUriCallBack() のように preg_relplace_callback()してもいいかも。 } if ($unicode) { return StrSjis::toUnicodePattern($_anchorRegexes[$pattern]); } return self::$_anchorRegexes[$pattern]; }
/** * 名前をHTML用に変換して返す * * @access private * @return string */ function transName($name, $resnum) { global $_conf; $nameID = ""; // ID付なら名前は "aki </b>◆...p2/2... <b>" といった感じでくる。(通常は普通に名前のみ) // ID付なら分解する if (preg_match("~(.*)( </b>◆.*)~", $name, $matches)) { $name = rtrim($matches[1]); $nameID = trim(strip_tags($matches[2])); } // 数字を引用レスポップアップリンク化 if ($_conf['quote_res_view']) { // </b>〜<b> は、ホスト(やトリップ)なのでマッチしないようにしたい $pettern = '/^( ?(?:>|>)* ?)?([1-9]\\d{0,3})(?=\\D|$)/'; $name && ($name = preg_replace_callback($pettern, array($this, 'quote_res_callback'), $name, 1)); } // ふしあなさんとか? $name = preg_replace('~</b>(.+?)<b>~', '<font color="#777777">$1</font>', $name); //(strlen($name) > 0) and $name = $name . " "; // 文字化け回避 $name = StrSjis::fixSjis($name); if ($nameID) { $name = $name . $nameID; } return $name; }
/** * 名前をHTML用に変換して返す * * @access private * @return string HTML */ function transName($name, $resnum) { global $_conf; $nameID = ''; // ID付なら名前は "aki </b>◆...p2/2... <b>" といった感じでくる。(通常は普通に名前のみ) // ID付なら分解する if (preg_match('~(.*)( </b>◆.*)~', $name, $matches)) { $name = rtrim($matches[1]); $nameID = trim(strip_tags($matches[2])); } // 数字を引用レスポップアップリンク化 if ($_conf['quote_res_view']) { // </b>〜<b> は、ホスト(やトリップ)なのでマッチしないようにしたい if ($name) { $name = preg_replace_callback($this->getAnchorRegex('/(?:^|%prefix%)%nums%/'), array($this, 'quote_name_callback'), $name); } } // ふしあなさんとか? $name = preg_replace('~</b>(.+?)<b>~', '<font color="#777777">$1</font>', $name); $name = StrSjis::fixSjis($name); if ($nameID) { $name = $name . $nameID; } return $name; }