Changeset 5476 for trunk/expressoMail1_2/inc/class.imap_functions.inc.php
- Timestamp:
- 02/06/12 11:20:51 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/expressoMail1_2/inc/class.imap_functions.inc.php
r5463 r5476 1827 1827 1828 1828 function replace_special_characters($body) 1829 { 1830 // Suspected TAGS! 1831 // $tag_list = Array('blink','object','meta','html','link','frame','iframe','layer','ilayer','plaintext','script','style','img','applet','embed','head','frameset','xml','xmp'); 1832 // remove MS Office's proprietary tag 1833 //$body = mb_ereg_replace('<!\-\-\[if [^!]* mso .*\]>.*<!\[endif\]\-\->', '', $body); 1834 // Layout problem: Change html elements 1835 // with absolute position to relate position, CASE INSENSITIVE. 1829 { 1830 if(trim($body) === '') return; 1831 1836 1832 $body = str_ireplace('POSITION: ABSOLUTE;','', $body); 1833 $body = str_ireplace('<o:p> </o:p>','<br />', $body);//Qubra de linha do MSO 1834 $body = preg_replace('/<(meta|base|link|html|\/html)[^>]*>/i', '', $body); 1835 1836 require_once('../library/CssToInlineStyles/css_to_inline_styles.php'); 1837 $cssToInlineStyles = new CSSToInlineStyles($body); 1838 $cssToInlineStyles->setUseInlineStylesBlock(true); 1839 $cssToInlineStyles->setCleanup(TRUE); 1840 $body = $cssToInlineStyles->convert(); //Converte as tag style em inline styles 1837 1841 1838 1842 ///--------------------------------// … … 1841 1845 'blink', 'object', 'frame', 'iframe', 1842 1846 'layer', 'ilayer', 'plaintext', 'script', 1843 'applet', 'embed', 'frameset', 'xml', 'xmp' 1847 'applet', 'embed', 'frameset', 'xml', 'xmp','style','head' 1844 1848 ); 1845 1849 1846 1850 foreach ($tag_list as $index => $tag) 1847 1851 $body = @mb_eregi_replace("<$tag\\b[^>]*>(.*?)</$tag>", '', $body); 1848 1849 $body = preg_replace('/<(meta|base|link)[^>]*>/i', '', $body); 1850 1851 //try to wrap CSS code instead of remove STYLE tags 1852 require_once('../library/csstidy/class.csstidy.php'); 1853 $css = new csstidy(); 1854 $css->set_cfg('preserve_css', false); 1855 1856 $regs_found = array(); 1857 $tags_found = preg_match_all("@<style[^>]*>.*?</style[^>]*>@si", $body, $regs_found); 1858 $wrapper_class = 'ExpressoCssWrapper' . time(); 1859 1860 foreach ($regs_found as $k => &$v) { 1861 foreach ($v as $kk => $vv) { 1862 $n_start = strpos($vv, '>') + 1; 1863 $n_length = strrpos($vv, '<') - $n_start; 1864 $bf_innerHTML = substr($vv, $n_start, $n_length); 1865 $bf_innerHTML = mb_ereg_replace('<!--', '', $bf_innerHTML); 1866 $bf_innerHTML = mb_ereg_replace('-->', '', $bf_innerHTML); 1867 1868 $css->parse($bf_innerHTML); 1869 1870 $prefix = ".$wrapper_class "; 1871 if (isset($css->css[41]) && count($css->css[41] > 0)) 1872 foreach ($css->css[41] as $key => $value) { 1873 //explode multiple selectors per block 1874 $selectors = explode(',', $key); 1875 1876 foreach ($selectors as $selector) { 1877 if (ereg('\*', $key)) { 1878 //skip selecto '*' 1879 continue; 1880 } 1881 1882 $selector = eregi_replace('[^#\.]*body.*', '', $selector); 1883 $css->css[41][$prefix . trim($selector)] = $value; 1884 } 1885 unset($css->css[41][$key]); 1886 } 1887 1888 $body = str_replace($vv, '<style>' . $css->print->plain() . '</style>', $body); 1889 } 1852 1853 // Malicious Code Remove 1854 $dirtyCodePattern = "/(<([\w]+[\w0-9]*)(.*)on(mouse(move|over|down|up)|load|blur|change|error|click|dblclick|focus|key(down|up|press)|select)([\n\ ]*)=([\n\ ]*)[\"'][^>\"']*[\"']([^>]*)>)(.*)(<\/\\2>)?/misU"; 1855 preg_match_all($dirtyCodePattern, $body, $rest, PREG_PATTERN_ORDER); 1856 foreach ($rest[0] as $i => $val) { 1857 if (!(preg_match("/javascript:window\.open\(\"([^'\"]*)\/index\.php\?menuaction=calendar\.uicalendar\.set_action\&cal_id=([^;'\"]+);?['\"]/i", $rest[1][$i]) && strtoupper($rest[4][$i]) == "CLICK" )) //Calendar events 1858 $body = str_replace($rest[1][$i], "<" . $rest[2][$i] . $rest[3][$i] . $rest[7][$i] . ">", $body); 1890 1859 } 1891 1892 // Malicious Code Remove 1893 $dirtyCodePattern = "/(<([\w]+[\w0-9]*)(.*)on(mouse(move|over|down|up)|load|blur|change|error|click|dblclick|focus|key(down|up|press)|select)([\n\ ]*)=([\n\ ]*)[\"'][^>\"']*[\"']([^>]*)>)(.*)(<\/\\2>)?/misU"; 1894 preg_match_all($dirtyCodePattern, $body, $rest, PREG_PATTERN_ORDER); 1895 foreach ($rest[0] as $i => $val) { 1896 if (!(preg_match("/javascript:window\.open\(\"([^'\"]*)\/index\.php\?menuaction=calendar\.uicalendar\.set_action\&cal_id=([^;'\"]+);?['\"]/i", $rest[1][$i]) && strtoupper($rest[4][$i]) == "CLICK" )) //Calendar events 1897 $body = str_replace($rest[1][$i], "<" . $rest[2][$i] . $rest[3][$i] . $rest[7][$i] . ">", $body); 1898 } 1899 1900 /* 1901 * Remove deslocamento a esquerda colocado pelo Outlook. 1902 * Este delocamento faz com que algumas palavras fiquem escondidas atras da barra lateral do expresso. 1903 */ 1904 $body = mb_ereg_replace("(<p[^>]*)(text-indent:[^>;]*-[^>;]*;)([^>]*>)", "\\1\\3", $body); 1905 $body = mb_ereg_replace("(<p[^>]*)(margin-right:[^>;]*-[^>;]*;)([^>]*>)", "\\1\\3", $body); 1906 $body = mb_ereg_replace("(<p[^>]*)(margin-left:[^>;]*-[^>;]*;)([^>]*>)", "\\1\\3", $body); 1907 //--------------------------------------------------------------------------------------------// 1908 //Remoção de tags <span></span> para correção de erro no firefox 1909 //Comentado pois estes replaces geram erros no html da msg, não se pode garantir que o os </span></span> sejam realmente os fechamentos dos <span><span>. 1910 //Caso realmente haja a nescessidade de remover estes spans deve ser repensado a forma de como faze-lo. 1911 // $body = mb_eregi_replace("<span><span>","",$body); 1912 // $body = mb_eregi_replace("</span></span>","",$body); 1913 //Correção para compatibilização com Outlook, ao visualizar a mensagem 1914 $body = mb_ereg_replace('<!--\[', '<!-- [', $body); 1915 $body = mb_ereg_replace('<!\[endif\]-->', '<![endif]-->', $body); 1916 1917 return "<div class=\"$wrapper_class\"><span>" . $body . '</span></div>'; 1860 1861 /* 1862 * Remove deslocamento a esquerda colocado pelo Outlook. 1863 * Este delocamento faz com que algumas palavras fiquem escondidas atras da barra lateral do expresso. 1864 */ 1865 $body = mb_ereg_replace("(<p[^>]*)(text-indent:[^>;]*-[^>;]*;)([^>]*>)", "\\1\\3", $body); 1866 $body = mb_ereg_replace("(<p[^>]*)(margin-right:[^>;]*-[^>;]*;)([^>]*>)", "\\1\\3", $body); 1867 $body = mb_ereg_replace("(<p[^>]*)(margin-left:[^>;]*-[^>;]*;)([^>]*>)", "\\1\\3", $body); 1868 //--------------------------------------------------------------------------------------------// 1869 //Remoção de tags <span></span> para correção de erro no firefox 1870 //Comentado pois estes replaces geram erros no html da msg, não se pode garantir que o os </span></span> sejam realmente os fechamentos dos <span><span>. 1871 //Caso realmente haja a nescessidade de remover estes spans deve ser repensado a forma de como faze-lo. 1872 // $body = mb_eregi_replace("<span><span>","",$body); 1873 // $body = mb_eregi_replace("</span></span>","",$body); 1874 //Correção para compatibilização com Outlook, ao visualizar a mensagem 1875 $body = mb_ereg_replace('<!--\[', '<!-- [', $body); 1876 $body = mb_ereg_replace('<!\[endif\]-->', '<![endif]-->', $body); 1877 $body = preg_replace("/<p[^\/>]*>([\s]?)*<\/p[^>]*>/", '', $body); //Remove paragrafos vazios (evita duplo espaçamento em emails do MSO) 1878 1879 return $body ; 1918 1880 } 1919 1881
Note: See TracChangeset
for help on using the changeset viewer.