ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Changeset 8619


Ignore:
Timestamp:
Oct 8, 2008, 11:34:40 PM (11 years ago)
Author:
ebihara
Message:

#2768:entry_point の場合のみ、t_url2cmd 実行時に textarea など「小窓に変換するべきでない箇所」であるかどうかを考慮するようにした

Location:
OpenPNE/trunk/webapp/lib
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE/trunk/webapp/lib/smarty_plugins/modifier.t_url2cmd.php

    r7716 r8619  
    77function smarty_modifier_t_url2cmd($string, $type = '', $target_c_member_id = '', $is_html = true)
    88{
     9    $list = array();
     10
     11    if ($type === 'entry_point') {
     12        // 置換用に文字列を退避
     13        list ($list, $string) = util_replace_patterns_to_marker($string);
     14    }
     15
    916    if (!$is_html || in_array($type, db_get_url2a_denied_list())) {
    1017        // HTMLエスケープされていない場合、 t_url2a の変換対象でない場合
     
    1825    $GLOBALS['_CMD']['target_c_member_id'] = $target_c_member_id;
    1926
    20     return preg_replace_callback($url_pattern, '_smarty_modifier_t_cmd_make_url_js', $string);
     27    $string = preg_replace_callback($url_pattern, '_smarty_modifier_t_cmd_make_url_js', $string);
     28
     29    if ($type === 'entry_point') {
     30        // 退避した文字列を元に戻す
     31        $string = str_replace(array_keys($list), array_values($list), $string);
     32    }
     33
     34    return $string;
    2135}
    2236
  • OpenPNE/trunk/webapp/lib/smarty_plugins/outputfilter.pne_display_emoji.php

    r6993 r8619  
    1313
    1414    if (empty($GLOBALS['__Framework']['carrier'])) {
    15         // input, textarea, option, img, head を退避
    16         $patterns = array(
    17             '/<input[^>]+>/is',
    18             '/<textarea.*?<\/textarea>/is',
    19             '/<option.*?<\/option>/is',
    20             '/<img[^>]+>/is',
    21             '/<head.*?<\/head>/is',
    22         );
    23 
    24         list ($list, $tpl_output) = _smarty_outputfilter_pne_display_emoji_replace($patterns, $tpl_output);
     15        // 置換用に文字列を退避
     16        list ($list, $tpl_output) = util_replace_patterns_to_marker($tpl_output);
    2517    }
    2618
     
    2921
    3022    if (empty($GLOBALS['__Framework']['carrier'])) {
    31         // input, textarea, option, img, head を元に戻す
     23        // 退避した文字列を元に戻す
    3224        $tpl_output = str_replace(array_keys($list), array_values($list), $tpl_output);
    3325    }
     
    3628}
    3729
    38 function _smarty_outputfilter_pne_display_emoji_replace($patterns, $subject)
    39 {
    40     $i = 0;
    41     $list = array();
    42 
    43     foreach ($patterns as $pattern) {
    44         if (preg_match_all($pattern, $subject, $matches)) {
    45             foreach ($matches[0] as $match) {
    46                 $replacement = '<<<NOEMOJI:'.$i.'>>>';
    47                 $list[$replacement] = $match;
    48                 $i++;
    49             }
    50         }
    51     }
    52 
    53     $subject = str_replace(array_values($list), array_keys($list), $subject);
    54 
    55     return array($list, $subject);
    56 }
    57 
    5830?>
  • OpenPNE/trunk/webapp/lib/util/util.php

    r8381 r8619  
    10081008}
    10091009
     1010/**
     1011 * マッチングした文字列を一時的に退避する
     1012 *
     1013 * $patterns に指定された正規表現のパターンにマッチするものをマーカーに置換し、
     1014 * 置換後の文字列、マーカーと元の文字列の対応テーブルを返す。
     1015 *
     1016 * @param string $subject
     1017 * @param array  $patterns
     1018 * @return array
     1019 */
     1020function util_replace_patterns_to_marker($subject, $patterns = array())
     1021{
     1022    $i = 0;
     1023    $list = array();
     1024
     1025    if (empty($patterns)) {
     1026        $patterns = array(
     1027            '/<input[^>]+>/is',
     1028            '/<textarea.*?<\/textarea>/is',
     1029            '/<option.*?<\/option>/is',
     1030            '/<img[^>]+>/is',
     1031            '/<head.*?<\/head>/is',
     1032        );
     1033    }
     1034
     1035    foreach ($patterns as $pattern) {
     1036        if (preg_match_all($pattern, $subject, $matches)) {
     1037            foreach ($matches[0] as $match) {
     1038                $replacement = '<<<MARKER:'.$i.'>>>';
     1039                $list[$replacement] = $match;
     1040                $i++;
     1041            }
     1042        }
     1043    }
     1044
     1045    $subject = str_replace(array_values($list), array_keys($list), $subject);
     1046
     1047    return array($list, $subject);
     1048}
     1049
    10101050?>
Note: See TracChangeset for help on using the changeset viewer.