Exemplo n.º 1
0
Arquivo: StrCtl.php Projeto: poppen/p2
 /**
  * マルチバイト対応でHTML中の検索語句をマーキングする
  *
  * @static
  * @access  public
  * @param   string  $pattern    マッチ文字列。SJISで入ってくる。あらかじめhtmlspecialchars()されていること。
  * @param   string  $targetHtml 置換対象文字列。SJISで入ってくる。HTML。
  * @return  string  HTML
  */
 function filterMarking($pattern, $targetHtml, $marker = '<b class="filtering">\\0</b>')
 {
     global $res_filter;
     if ($res_filter['method'] == 'regex') {
         $pattern = StrCtl::replaceRegexAnyChar($pattern);
     }
     // 全角/半角を(ある程度)区別なくマッチ
     $pattern = StrCtl::getPatternZenHan($pattern);
     // 正規表現パターン
     // HTML要素にマッチさせないための否定先読みパターンを付加
     $pattern = $pattern . '(?![^<]*>)';
     $result = false;
     if (P2_MBREGEX_AVAILABLE == 1) {
         $result = mb_eregi_replace($pattern, $marker, $targetHtml);
         // Error => FALSE
     } else {
         // UTF-8に変換してから処理する
         $pattern = str_replace('/', '\\/', $pattern);
         $pattern_utf8 = '/' . mb_convert_encoding($pattern, 'UTF-8', 'SJIS-win') . '/iu';
         $target_utf8 = mb_convert_encoding($targetHtml, 'UTF-8', 'SJIS-win');
         $result = preg_replace($pattern_utf8, $marker, $target_utf8);
         $result = mb_convert_encoding($result, 'SJIS-win', 'UTF-8');
     }
     if ($result === false) {
         return $targetHtml;
     }
     return $result;
 }