예제 #1
0
 /**
  * Process the string, romanizing the characters
  * @param	string	Input string with extended chars
  * @return	string	String
  */
 public function process($string)
 {
     /* Edit the chr(xxx) values to suit
        The default is a duplication of the default code */
     if (IPSText::isUTF8($string)) {
         $_chr = array(chr(195) . chr(128) => 'Ae', chr(195) . chr(129) => 'A', chr(195) . chr(130) => 'A', chr(195) . chr(131) => 'A', chr(195) . chr(132) => 'A', chr(195) . chr(133) => 'A', chr(195) . chr(135) => 'C', chr(195) . chr(136) => 'E', chr(195) . chr(137) => 'E', chr(195) . chr(138) => 'E', chr(195) . chr(139) => 'E', chr(195) . chr(140) => 'I', chr(195) . chr(141) => 'I', chr(195) . chr(142) => 'I', chr(195) . chr(143) => 'I', chr(195) . chr(145) => 'N', chr(195) . chr(146) => 'O', chr(195) . chr(147) => 'O', chr(195) . chr(148) => 'O', chr(195) . chr(149) => 'O', chr(195) . chr(150) => 'Oe', chr(195) . chr(153) => 'U', chr(195) . chr(154) => 'U', chr(195) . chr(155) => 'U', chr(195) . chr(156) => 'Ue', chr(195) . chr(157) => 'Y', chr(195) . chr(159) => 'ss', chr(195) . chr(160) => 'a', chr(195) . chr(161) => 'a', chr(195) . chr(162) => 'a', chr(195) . chr(163) => 'a', chr(195) . chr(164) => 'ae', chr(195) . chr(165) => 'a', chr(195) . chr(167) => 'c', chr(195) . chr(168) => 'e', chr(195) . chr(169) => 'e', chr(195) . chr(170) => 'e', chr(195) . chr(171) => 'e', chr(195) . chr(172) => 'i', chr(195) . chr(173) => 'i', chr(195) . chr(174) => 'i', chr(195) . chr(175) => 'i', chr(195) . chr(177) => 'n', chr(195) . chr(178) => 'o', chr(195) . chr(179) => 'o', chr(195) . chr(180) => 'o', chr(195) . chr(181) => 'o', chr(195) . chr(182) => 'oe', chr(195) . chr(185) => 'u', chr(195) . chr(186) => 'u', chr(195) . chr(187) => 'u', chr(195) . chr(188) => 'ue', chr(195) . chr(189) => 'y', chr(195) . chr(191) => 'y', chr(196) . chr(128) => 'A', chr(196) . chr(129) => 'a', chr(196) . chr(130) => 'A', chr(196) . chr(131) => 'a', chr(196) . chr(132) => 'A', chr(196) . chr(133) => 'a', chr(196) . chr(134) => 'C', chr(196) . chr(135) => 'c', chr(196) . chr(136) => 'C', chr(196) . chr(137) => 'c', chr(196) . chr(138) => 'C', chr(196) . chr(139) => 'c', chr(196) . chr(140) => 'C', chr(196) . chr(141) => 'c', chr(196) . chr(142) => 'D', chr(196) . chr(143) => 'd', chr(196) . chr(144) => 'D', chr(196) . chr(145) => 'd', chr(196) . chr(146) => 'E', chr(196) . chr(147) => 'e', chr(196) . chr(148) => 'E', chr(196) . chr(149) => 'e', chr(196) . chr(150) => 'E', chr(196) . chr(151) => 'e', chr(196) . chr(152) => 'E', chr(196) . chr(153) => 'e', chr(196) . chr(154) => 'E', chr(196) . chr(155) => 'e', chr(196) . chr(156) => 'G', chr(196) . chr(157) => 'g', chr(196) . chr(158) => 'G', chr(196) . chr(159) => 'g', chr(196) . chr(160) => 'G', chr(196) . chr(161) => 'g', chr(196) . chr(162) => 'G', chr(196) . chr(163) => 'g', chr(196) . chr(164) => 'H', chr(196) . chr(165) => 'h', chr(196) . chr(166) => 'H', chr(196) . chr(167) => 'h', chr(196) . chr(168) => 'I', chr(196) . chr(169) => 'i', chr(196) . chr(170) => 'I', chr(196) . chr(171) => 'i', chr(196) . chr(172) => 'I', chr(196) . chr(173) => 'i', chr(196) . chr(174) => 'I', chr(196) . chr(175) => 'i', chr(196) . chr(176) => 'I', chr(196) . chr(177) => 'i', chr(196) . chr(178) => 'IJ', chr(196) . chr(179) => 'ij', chr(196) . chr(180) => 'J', chr(196) . chr(181) => 'j', chr(196) . chr(182) => 'K', chr(196) . chr(183) => 'k', chr(196) . chr(184) => 'k', chr(196) . chr(185) => 'L', chr(196) . chr(186) => 'l', chr(196) . chr(187) => 'L', chr(196) . chr(188) => 'l', chr(196) . chr(189) => 'L', chr(196) . chr(190) => 'l', chr(196) . chr(191) => 'L', chr(197) . chr(128) => 'l', chr(197) . chr(129) => 'L', chr(197) . chr(130) => 'l', chr(197) . chr(131) => 'N', chr(197) . chr(132) => 'n', chr(197) . chr(133) => 'N', chr(197) . chr(134) => 'n', chr(197) . chr(135) => 'N', chr(197) . chr(136) => 'n', chr(197) . chr(137) => 'N', chr(197) . chr(138) => 'n', chr(197) . chr(139) => 'N', chr(197) . chr(140) => 'O', chr(197) . chr(141) => 'o', chr(197) . chr(142) => 'O', chr(197) . chr(143) => 'o', chr(197) . chr(144) => 'O', chr(197) . chr(145) => 'o', chr(197) . chr(146) => 'OE', chr(197) . chr(147) => 'oe', chr(197) . chr(148) => 'R', chr(197) . chr(149) => 'r', chr(197) . chr(150) => 'R', chr(197) . chr(151) => 'r', chr(197) . chr(152) => 'R', chr(197) . chr(153) => 'r', chr(197) . chr(154) => 'S', chr(197) . chr(155) => 's', chr(197) . chr(156) => 'S', chr(197) . chr(157) => 's', chr(197) . chr(158) => 'S', chr(197) . chr(159) => 's', chr(197) . chr(160) => 'S', chr(197) . chr(161) => 's', chr(197) . chr(162) => 'T', chr(197) . chr(163) => 't', chr(197) . chr(164) => 'T', chr(197) . chr(165) => 't', chr(197) . chr(166) => 'T', chr(197) . chr(167) => 't', chr(197) . chr(168) => 'U', chr(197) . chr(169) => 'u', chr(197) . chr(170) => 'U', chr(197) . chr(171) => 'u', chr(197) . chr(172) => 'U', chr(197) . chr(173) => 'u', chr(197) . chr(174) => 'U', chr(197) . chr(175) => 'u', chr(197) . chr(176) => 'U', chr(197) . chr(177) => 'u', chr(197) . chr(178) => 'U', chr(197) . chr(179) => 'u', chr(197) . chr(180) => 'W', chr(197) . chr(181) => 'w', chr(197) . chr(182) => 'Y', chr(197) . chr(183) => 'y', chr(197) . chr(184) => 'Y', chr(197) . chr(185) => 'Z', chr(197) . chr(186) => 'z', chr(197) . chr(187) => 'Z', chr(197) . chr(188) => 'z', chr(197) . chr(189) => 'Z', chr(197) . chr(190) => 'z', chr(197) . chr(191) => 's', chr(226) . chr(130) . chr(172) => 'E', chr(194) . chr(163) => '');
         $string = strtr($string, $_chr);
     } else {
         $_chr = array();
         $_dblChars = array();
         /* We assume ISO-8859-1 if not UTF-8 */
         $_chr['in'] = chr(128) . chr(131) . chr(138) . chr(142) . chr(154) . chr(158) . chr(159) . chr(162) . chr(165) . chr(181) . chr(192) . chr(193) . chr(194) . chr(195) . chr(199) . chr(200) . chr(201) . chr(202) . chr(203) . chr(204) . chr(205) . chr(206) . chr(207) . chr(209) . chr(210) . chr(211) . chr(212) . chr(213) . chr(217) . chr(218) . chr(219) . chr(220) . chr(221) . chr(224) . chr(225) . chr(226) . chr(227) . chr(231) . chr(232) . chr(233) . chr(234) . chr(235) . chr(236) . chr(237) . chr(238) . chr(239) . chr(241) . chr(242) . chr(243) . chr(244) . chr(245) . chr(249) . chr(250) . chr(251) . chr(252) . chr(253) . chr(255) . chr(191) . chr(182) . chr(179) . chr(166) . chr(230) . chr(198) . chr(175) . chr(172) . chr(188) . chr(163) . chr(161) . chr(177);
         $_chr['out'] = "EfSZszYcYuAAAACEEEEIIIINOOOOUUUUYaaaaceeeeiiiinoooouuuuyyzslScCZZzLAa";
         $string = strtr($string, $_chr['in'], $_chr['out']);
         $_dblChars['in'] = array(chr(140), chr(156), chr(196), chr(197), chr(198), chr(208), chr(214), chr(216), chr(222), chr(223), chr(228), chr(229), chr(230), chr(240), chr(246), chr(248), chr(254));
         $_dblChars['out'] = array('Oe', 'oe', 'Ae', 'Aa', 'Ae', 'DH', 'Oe', 'Oe', 'TH', 'ss', 'ae', 'aa', 'ae', 'dh', 'oe', 'oe', 'th');
         $string = str_replace($_dblChars['in'], $_dblChars['out'], $string);
     }
     return $string;
 }
예제 #2
0
 /**
  * Encodes meta tag content so its safe for readers, etc
  * 
  * @param	string		$content		Meta tag content
  * @return	@e string
  */
 public function encodeMetaTagContent($content, $makeUTF8Safe = false)
 {
     $content = IPSText::htmlspecialchars($content);
     # Hebrew chars screw up Facebook sharer
     if ($makeUTF8Safe === true && IPS_DOC_CHAR_SET == 'UTF-8' && IPSText::isUTF8($content)) {
         $content = IPSText::utf8ToEntities($content);
     }
     return $content;
 }
 /**
  * Uploads and saves file
  *
  * @return	mixed	void, or the new insert id
  */
 public function processUpload()
 {
     //-----------------------------------------
     // INIT
     //-----------------------------------------
     $this->error = '';
     $this->getUploadFormSettings();
     //-----------------------------------------
     // Check upload dir
     //-----------------------------------------
     if (!$this->checkUploadDirectory()) {
         if ($this->error) {
             return;
         }
     }
     //-----------------------------------------
     // Can upload?
     //-----------------------------------------
     if (!$this->attach_stats['allow_uploads']) {
         $this->error = 'upload_failed';
         return;
     }
     //-----------------------------------------
     // Got attachment types?
     //-----------------------------------------
     if (!$this->registry->cache()->getCache('attachtypes') or !is_array($this->registry->cache()->getCache('attachtypes'))) {
         $attachtypes = array();
         $this->DB->build(array('select' => 'atype_extension,atype_mimetype,atype_post,atype_img', 'from' => 'attachments_type', 'where' => "atype_post=1"));
         $this->DB->execute();
         while ($r = $this->DB->fetch()) {
             $attachtypes[$r['atype_extension']] = $r;
         }
         $this->registry->cache()->updateCacheWithoutSaving('attachtypes', $attachtypes);
     }
     //-----------------------------------------
     // Set up array
     //-----------------------------------------
     $attach_data = array('attach_ext' => "", 'attach_file' => "", 'attach_location' => "", 'attach_thumb_location' => "", 'attach_hits' => 0, 'attach_date' => time(), 'attach_post_key' => $this->attach_post_key, 'attach_member_id' => $this->memberData['member_id'], 'attach_rel_id' => $this->attach_rel_id, 'attach_rel_module' => $this->type, 'attach_filesize' => 0);
     //-----------------------------------------
     // Load the library
     //-----------------------------------------
     require_once IPS_KERNEL_PATH . 'classUpload.php';
     /*noLibHook*/
     $upload = new classUpload();
     //-----------------------------------------
     // Set up the variables
     //-----------------------------------------
     $upload->out_file_name = $this->type . '-' . $this->memberData['member_id'] . '-' . str_replace(array('.', ' '), '-', microtime());
     $upload->out_file_dir = $this->upload_path;
     $upload->max_file_size = $this->attach_stats['max_single_upload'] ? $this->attach_stats['max_single_upload'] : 1000000000;
     $upload->make_script_safe = 1;
     $upload->force_data_ext = 'ipb';
     //-----------------------------------------
     // Populate allowed extensions
     //-----------------------------------------
     if (is_array($this->registry->cache()->getCache('attachtypes')) and count($this->registry->cache()->getCache('attachtypes'))) {
         /* SKINNOTE: I had to add [attachtypes] to this cache to make it work, may need fixing? */
         //$tmp = $this->registry->cache()->getCache('attachtypes');
         foreach ($this->registry->cache()->getCache('attachtypes') as $idx => $data) {
             if ($data['atype_post']) {
                 $upload->allowed_file_ext[] = $data['atype_extension'];
             }
         }
     }
     //-----------------------------------------
     // Upload...
     //-----------------------------------------
     $upload->process();
     //-----------------------------------------
     // Error?
     //-----------------------------------------
     if ($upload->error_no) {
         switch ($upload->error_no) {
             case 1:
                 // No upload
                 $this->error = 'upload_no_file';
                 return $attach_data;
                 break;
             case 2:
                 // Invalid file ext
                 $this->error = 'invalid_mime_type';
                 return $attach_data;
                 break;
             case 3:
                 // Too big...
                 $this->error = 'upload_too_big';
                 return $attach_data;
                 break;
             case 4:
                 // Cannot move uploaded file
                 $this->error = 'upload_failed';
                 return $attach_data;
                 break;
             case 5:
                 // Possible XSS attack (image isn't an image)
                 $this->error = 'upload_failed';
                 return $attach_data;
                 break;
         }
     }
     //-----------------------------------------
     // Still here?
     //-----------------------------------------
     if ($upload->saved_upload_name and @is_file($upload->saved_upload_name)) {
         //-----------------------------------------
         // Strip off { } and [ ]
         //-----------------------------------------
         $upload->original_file_name = str_replace(array('[', ']', '{', '}'), "", $upload->original_file_name);
         $attach_data['attach_filesize'] = @filesize($upload->saved_upload_name);
         $attach_data['attach_location'] = $this->upload_dir . $upload->parsed_file_name;
         if (IPSText::isUTF8($upload->original_file_name)) {
             $attach_data['attach_file'] = IPSText::convertCharsets($upload->original_file_name, "UTF-8", IPS_DOC_CHAR_SET);
         } else {
             $attach_data['attach_file'] = $upload->original_file_name;
         }
         $attach_data['attach_is_image'] = $upload->is_image;
         $attach_data['attach_ext'] = $upload->real_file_extension;
         if ($attach_data['attach_is_image'] == 1) {
             require_once IPS_KERNEL_PATH . 'classImage.php';
             /*noLibHook*/
             require_once IPS_KERNEL_PATH . 'classImageGd.php';
             /*noLibHook*/
             /* Main attachment */
             if (!empty($this->settings['attach_img_max_w']) and !empty($this->settings['attach_img_max_h'])) {
                 $image = new classImageGd();
                 $image->init(array('image_path' => $this->upload_path, 'image_file' => $upload->parsed_file_name));
                 $image->force_resize = false;
                 if ($imgData = $image->resizeImage($this->settings['attach_img_max_w'], $this->settings['attach_img_max_h'], false, true)) {
                     if (!$imgData['noResize']) {
                         $image->writeImage($this->upload_path . '/' . $upload->parsed_file_name);
                     }
                     if (is_array($imgData)) {
                         $attach_data['attach_img_width'] = $imgData['newWidth'];
                         $attach_data['attach_img_height'] = $imgData['newHeight'];
                     }
                     $attach_data['attach_filesize'] = @filesize($this->upload_path . '/' . $upload->parsed_file_name);
                 }
             }
             /* Thumb nail */
             $image = new classImageGd();
             $image->force_resize = true;
             $image->init(array('image_path' => $this->upload_path, 'image_file' => $upload->parsed_file_name));
             if (TRUE) {
                 if ($this->attach_settings['siu_width'] < $attach_data['attach_img_width'] or $this->attach_settings['siu_height'] < $attach_data['attach_img_height']) {
                     $_thumbName = preg_replace('#^(.*)\\.(\\w+?)$#', "\\1_thumb.\\2", $upload->parsed_file_name);
                     if ($thumb_data = $image->resizeImage($this->attach_settings['siu_width'], $this->attach_settings['siu_height'])) {
                         $image->writeImage($this->upload_path . '/' . $_thumbName);
                         if (is_array($thumb_data)) {
                             $thumb_data['thumb_location'] = $_thumbName;
                         }
                     }
                 } else {
                     /* Instead of building a thumb the same size as the main image, just copy the details */
                     $thumb_data = array('thumb_location' => $upload->parsed_file_name, 'newWidth' => $attach_data['attach_img_width'], 'newHeight' => $attach_data['attach_img_height']);
                 }
             }
             if ($thumb_data['thumb_location']) {
                 $attach_data['attach_img_width'] = $thumb_data['originalWidth'];
                 $attach_data['attach_img_height'] = $thumb_data['originalHeight'];
                 $attach_data['attach_thumb_width'] = $thumb_data['newWidth'];
                 $attach_data['attach_thumb_height'] = $thumb_data['newHeight'];
                 $attach_data['attach_thumb_location'] = $this->upload_dir . $thumb_data['thumb_location'];
             }
         }
         //-----------------------------------------
         // Make sure we send integers
         // @link	http://community.invisionpower.com/tracker/issue-32511-attachments-mysql-strict-mode
         //-----------------------------------------
         $attach_data['attach_img_width'] = intval($attach_data['attach_img_width']);
         $attach_data['attach_img_height'] = intval($attach_data['attach_img_height']);
         $attach_data['attach_thumb_width'] = intval($attach_data['attach_thumb_width']);
         $attach_data['attach_thumb_height'] = intval($attach_data['attach_thumb_height']);
         //-----------------------------------------
         // Add into Database
         //-----------------------------------------
         $this->DB->insert('attachments', $attach_data);
         $newid = $this->DB->getInsertId();
         return $newid;
     }
 }
예제 #4
0
 /**
  * Expand the acronyms for SEO
  * @param string $txt
  */
 protected function _seoAcronymExpansion($txt)
 {
     if ($txt == '') {
         return $txt;
     }
     $acronyms = $this->cache->getCache('ipseo_acronyms');
     if (!is_array($acronyms) or !count($acronyms)) {
         return $txt;
     }
     $temp_text = $txt;
     $urls = array();
     $tags = array();
     $txt = str_replace('<#EMO_DIR#>', '-#-#-#EMO_DIR#-#-#-', $txt);
     /* Grab images */
     preg_match_all('#<img([^>]+?)>#i', $txt, $matches);
     foreach ($matches[0] as $m) {
         $c = count($urls);
         $urls[$c] = $m;
         $txt = str_replace($m, '<!--url{' . $c . '}-->', $txt);
     }
     /* Grab <a> */
     preg_match_all('#<a([^>]+?)>#i', $txt, $matches);
     foreach ($matches[0] as $m) {
         $c = count($urls);
         $urls[$c] = $m;
         $txt = str_replace($m, '<!--url{' . $c . '}-->', $txt);
     }
     /* Grab all other tags */
     preg_match_all('#<(?:[/a-z]{1,})([^>]+?)>#i', $txt, $matches);
     foreach ($matches[0] as $m) {
         $c = count($tags);
         $tags[$c] = $m;
         $txt = str_replace($m, '<!--tag{' . $c . '}-->', $txt);
     }
     /* Grab non linked URLs */
     preg_match_all('#((http|https|news|ftp)://(?:[^<>\\)\\[\\"\\s]+|[a-zA-Z0-9/\\._\\-!&\\#;,%\\+\\?:=]+))#is', $txt, $matches);
     foreach ($matches[0] as $m) {
         $c = count($urls);
         $urls[$c] = $m;
         $txt = str_replace($m, '<!--url{' . $c . '}-->', $txt);
     }
     //-----------------------------------------
     // Convert back entities
     //-----------------------------------------
     for ($i = 65; $i <= 90; $i++) {
         $txt = str_replace("&#" . $i . ";", chr($i), $txt);
     }
     for ($i = 97; $i <= 122; $i++) {
         $txt = str_replace("&#" . $i . ";", chr($i), $txt);
     }
     //-----------------------------------------
     // Go all loopy
     //-----------------------------------------
     if (is_array($acronyms) && count($acronyms)) {
         foreach ($acronyms as $r) {
             $this->_currentAcronym = $r;
             /*																								vv Ticket #835804 */
             $wordModifier = IPS_DOC_CHAR_SET == 'UTF-8' && IPSText::isUTF8($txt) ? '[^<>\\p{L}]|\\b' : '[^<>a-zA-Z0-9-_&;]';
             $caseModifier = empty($r['a_casesensitive']) ? 'i' : '';
             $r['a_short'] = preg_quote($r['a_short'], "/");
             $txt = preg_replace_callback('/(^|' . $wordModifier . ')(' . $r['a_short'] . ')(' . $wordModifier . '|$)/' . $caseModifier, array($this, '_replaceAcronym'), $txt);
         }
     }
     /* replace urls */
     if (count($urls)) {
         foreach ($urls as $k => $v) {
             $txt = str_replace("<!--url{" . $k . "}-->", $v, $txt);
         }
     }
     /* replace tags */
     if (count($tags)) {
         foreach ($tags as $k => $v) {
             $txt = str_replace("<!--tag{" . $k . "}-->", $v, $txt);
         }
     }
     $txt = str_replace('-#-#-#EMO_DIR#-#-#-', '<#EMO_DIR#>', $txt);
     return $txt ? $txt : $temp_text;
 }