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

Changeset 6031 for OpenPNE/trunk/webapp


Ignore:
Timestamp:
Mar 24, 2008, 6:53:34 PM (15 years ago)
Author:
ebihara
Message:

#1978:絵文字を多用された場合、PHPに割り当てられたメモリを超過し、Fatal error が発生することがあったのを修正(thanks to kunitさん)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE/trunk/webapp/lib/smarty_plugins/outputfilter.pne_display_emoji.php

    r4069 r6031  
    66function smarty_outputfilter_pne_display_emoji($tpl_output, &$smarty)
    77{
    8     global $list;
    98    $list = array();
    109
    1110    if (empty($GLOBALS['__Framework']['carrier'])) {
    1211        // input, textarea を退避
    13         $regexp = '/<input[^>]+>/is';
    14         $tpl_output = preg_replace_callback($regexp, '_smarty_outputfilter_pne_display_emoji_callback', $tpl_output);
     12        $patterns = array(
     13            '/<input[^>]+>/is',
     14            '/<textarea[^>]+>.*?<\/textarea>/is',
     15        );
    1516
    16         $regexp = '/<textarea[^>]+>.*?<\/textarea>/is';
    17         $tpl_output = preg_replace_callback($regexp, '_smarty_outputfilter_pne_display_emoji_callback', $tpl_output);
     17        list ($list, $tpl_output) = _smarty_outputfilter_pne_display_emoji_replace($patterns, $tpl_output);
    1818    }
    1919
     
    2929}
    3030
    31 function _smarty_outputfilter_pne_display_emoji_callback($matches)
     31function _smarty_outputfilter_pne_display_emoji_replace($patterns, $subject)
    3232{
    33     global $list;
    34     static $i = 0;
     33    $i = 0;
     34    $list = array();
    3535
    36     $replacement = '<<<NOEMOJI:'.$i.'>>>';
    37     $list[$replacement] = $matches[0];
    38     $i++;
     36    foreach ($patterns as $pattern) {
     37        if (preg_match_all($pattern, $subject, $matches)) {
     38            foreach ($matches[0] as $match) {
     39                $replacement = '<<<NOEMOJI:'.$i.'>>>';
     40                $list[$replacement] = $match;
     41                $i++;
     42            }
     43        }
     44    }
    3945
    40     return $replacement;
     46    $subject = str_replace(array_values($list), array_keys($list), $subject);
     47
     48    return array($list, $subject);
    4149}
    4250
Note: See TracChangeset for help on using the changeset viewer.