Changeset 9771
- Timestamp:
- Dec 29, 2008, 5:46:42 PM (14 years ago)
- Location:
- OpenPNE3/trunk/lib
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
OpenPNE3/trunk/lib/filter/sfMobileIOFilter.class.php
r8785 r9771 17 17 public function execute($filterChain) 18 18 { 19 $this->convertEmojiForInput(); 19 20 $this->convertEncodingForInput(); 20 21 … … 56 57 } 57 58 59 private function convertEmojiForInput() 60 { 61 $request = $this->getContext()->getRequest(); 62 $parameter_holder = $request->getParameterHolder(); 63 64 foreach ($parameter_holder->getAll() as $key => $value) { 65 $parameter_holder->set($key, $this->convertEmojiForInputCallback($value)); 66 } 67 } 68 69 private function convertEmojiForInputCallback($value) 70 { 71 if (is_array($value)) 72 { 73 return array_map(array($this, 'convertEmojiForInputCallback'), $value); 74 } 75 76 $result = ''; 77 78 for ($i = 0; $i < strlen($value); $i++) 79 { 80 $emoji = ''; 81 $c1 = ord($value[$i]); 82 if ($this->getContext()->getRequest()->getMobile()->isSoftBank()) 83 { 84 if ($c1 == 0xF7 || $c1 == 0xF9 || $c1 == 0xFB) 85 { 86 $bin = substr($value, $i, 2); 87 $emoji = OpenPNE_KtaiEmoji::convertSoftBankEmojiToOpenPNEFormat($bin); 88 } 89 } 90 elseif ($c1 == 0xF8 || $c1 == 0xF9) 91 { 92 $bin = substr($value, $i, 2); 93 $emoji = OpenPNE_KtaiEmoji::convertDoCoMoEmojiToOpenPNEFormat($bin); 94 } 95 elseif (0xF3 <= $c1 && $c1 <= 0xF7) 96 { 97 $bin = substr($value, $i, 2); 98 $emoji = OpenPNE_KtaiEmoji::convertEZWebEmojiToOpenPNEFormat($bin); 99 } 100 if ($emoji) 101 { 102 $result .= $emoji; 103 $i++; 104 } 105 else 106 { 107 $result .= $value[$i]; 108 if ((0x81 <= $c1 && $c1 <= 0x9F) || 0xE0 <= $c1) 109 { 110 $result .= $value[$i+1]; 111 $i++; 112 } 113 } 114 } 115 116 return $result; 117 } 118 58 119 /** 59 120 * Converts character encoding for output. -
OpenPNE3/trunk/lib/vendor/OpenPNE2/KtaiEmoji.php
r9770 r9771 2916 2916 } 2917 2917 } 2918 2919 protected static function convertDoCoMoEmojiToOpenPNEFormat($bin) 2920 { 2921 $iemoji = '\xF8[\x9F-\xFC]|\xF9[\x40-\xFC]'; 2922 if (preg_match('/'.$iemoji.'/', $bin)) 2923 { 2924 $unicode = mb_convert_encoding($bin, 'UCS2', 'SJIS-win'); 2925 $emoji_code = OpenPNE_KtaiEmoji::getInstance(); 2926 $code = $emoji_code->get_emoji_code4emoji(sprintf('&#x%02X%02X;', ord($unicode[0]), ord($unicode[1])), 'i'); 2927 return '['.$code.']'; 2928 } 2929 return ''; 2930 } 2931 2932 protected static function convertEZwebEmojiToOpenPNEFormat($bin) 2933 { 2934 $sjis = (ord($bin[0]) << 8) + ord($bin[1]); 2935 if ($sjis >= 0xF340 && $sjis <= 0xF493) 2936 { 2937 if ($sjis <= 0xF352) 2938 { 2939 $unicode = $sjis - 3443; 2940 } 2941 elseif ($sjis <= 0xF37E) 2942 { 2943 $unicode = $sjis - 2259; 2944 } 2945 elseif ($sjis <= 0xF3CE) 2946 { 2947 $unicode = $sjis - 2260; 2948 } 2949 elseif ($sjis <= 0xF3FC) 2950 { 2951 $unicode = $sjis - 2241; 2952 } 2953 elseif ($sjis <= 0xF47E) 2954 { 2955 $unicode = $sjis - 2308; 2956 } 2957 else 2958 { 2959 $unicode = $sjis - 2309; 2960 } 2961 } 2962 elseif ($sjis >= 0xF640 && $sjis <= 0xF7FC) 2963 { 2964 if ($sjis <= 0xF67E) 2965 { 2966 $unicode = $sjis - 4568; 2967 } 2968 elseif ($sjis <= 0xF6FC) 2969 { 2970 $unicode = $sjis - 4569; 2971 } 2972 elseif ($sjis <= 0xF77E) 2973 { 2974 $unicode = $sjis - 4636; 2975 } 2976 elseif ($sjis <= 0xF7D1) 2977 { 2978 $unicode = $sjis - 4637; 2979 } 2980 elseif ($sjis <= 0xF7E4) 2981 { 2982 $unicode = $sjis - 3287; 2983 } 2984 else 2985 { 2986 $unicode = $sjis - 4656; 2987 } 2988 } 2989 else 2990 { 2991 return ''; 2992 } 2993 $emoji_code = OpenPNE_KtaiEmoji::getInstance(); 2994 $code = $emoji_code->get_emoji_code4emoji(sprintf('&#x%04X;', $unicode), 'e'); 2995 return '['.$code.']'; 2996 } 2997 2998 protected static function convertSoftBankEmojiToOpenPNEFormat($bin) 2999 { 3000 $sjis1 = ord($bin[0]); 3001 $sjis2 = ord($bin[1]); 3002 $web1 = $web2 = 0; 3003 switch ($sjis1) 3004 { 3005 case 0xF9: 3006 if ($sjis2 >= 0x41 && $sjis2 <= 0x7E) 3007 { 3008 $web1 = ord('G'); 3009 $web2 = $sjis2 - 0x20; 3010 } 3011 elseif ($sjis2 >= 0x80 && $sjis2 <= 0x9B) 3012 { 3013 $web1 = ord('G'); 3014 $web2 = $sjis2 - 0x21; 3015 } 3016 elseif ($sjis2 >= 0xA1 && $sjis2 <= 0xED) 3017 { 3018 $web1 = ord('O'); 3019 $web2 = $sjis2 - 0x80; 3020 } 3021 break; 3022 case 0xF7: 3023 if ($sjis2 >= 0x41 && $sjis2 <= 0x7E) 3024 { 3025 $web1 = ord('E'); 3026 $web2 = $sjis2 - 0x20; 3027 } 3028 elseif ($sjis2 >= 0x80 && $sjis2 <= 0x9B) 3029 { 3030 $web1 = ord('E'); 3031 $web2 = $sjis2 - 0x21; 3032 } 3033 elseif ($sjis2 >= 0xA1 && $sjis2 <= 0xF3) 3034 { 3035 $web1 = ord('F'); 3036 $web2 = $sjis2 - 0x80; 3037 } 3038 break; 3039 case 0xFB: 3040 if ($sjis2 >= 0x41 && $sjis2 <= 0x7E) 3041 { 3042 $web1 = ord('P'); 3043 $web2 = $sjis2 - 0x20; 3044 } 3045 elseif ($sjis2 >= 0x80 && $sjis2 <= 0x8D) 3046 { 3047 $web1 = ord('P'); 3048 $web2 = $sjis2 - 0x21; 3049 } 3050 elseif ($sjis2 >= 0xA1 && $sjis2 <= 0xD7) 3051 { 3052 $web1 = ord('Q'); 3053 $web2 = $sjis2 - 0x80; 3054 } 3055 break; 3056 default: 3057 return ''; 3058 } 3059 $emoji_code = OpenPNE_KtaiEmoji::getInstance(); 3060 $code = $emoji_code->get_emoji_code4emoji(pack('c5', 0x1b, 0x24, $web1, $web2, 0x0f), 's'); 3061 return '['.$code.']'; 3062 } 2918 3063 } 2919 3064
Note: See TracChangeset
for help on using the changeset viewer.