1. PHP / Говнокод #1106

    +154

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    /*-------------------------------------------------------------------------*/
    	// ENCODE HEADERS - RFC2047
    	/*-------------------------------------------------------------------------*/
    	
    	function encode_headers( $headers = array() )
    	{	
    		$enc_headers = count($headers) ? $headers : $this->mail_headers;
    		
            foreach( $enc_headers as $header => $value) 
            {
    	        $orig_value = $value;
    	        
                preg_match_all( '/(\w*[\x80-\xFF]+\w*)/', $value, $matches );
    
                foreach ($matches[1] as $match_value)
                {
    		        if( $header == 'From' OR $header == 'Content-Type' OR $header == 'Content-Disposition' )
    		        {
    			        // Either sendmail or the email servers don't like 'From' encoded...let's remove the board name
    			        // 	and just move along, as email address cannot contain nasty characters themselves
    			        
    			        $this->mail_headers[ $header ] = $orig_value;//$this->from;
    			        $enc_headers[ $header ] = $orig_value;//$this->from;
    			        
    			        continue 2;
    		        }
    	        	            
                    $replacement = preg_replace_callback( '/([=_\?\x00-\x1F\x80-\xFF])/', create_function( '$match', 'return "=" . strtoupper( dechex( ord( "$match[1]" ) ) );' ), $match_value );
                    
                   	$value = str_replace( $match_value, $replacement, $value );
                }
                
                if( $orig_value != $value )
                {
    	            $value = '=?' . $this->char_set . '?Q?' . str_replace( " ", "=20", $value ) . '?=';
                }
    
                if( !count($headers) )
                {
                	$this->mail_headers[ $header ] = $value;
            	}
            	else
            	{
    	        	$enc_headers[ $header ] = $value;
            	}
            }
            
            return $enc_headers;
        }

    IPBoard 2.3.6
    class_email.php вообще изобилует весьма странными решениями, которые в итоге даже рвут хедеры письма. Но вот эта функция сверх всяких похвал - не смотря на то что она в большинстве случаев делает вид, что она работает - на самом деле это не так. Она целые блоки текста оставляет как есть (текст само собой русский, и емыл-клиенты немного обижаются).
    Очень завбавно получать такие письма-уведомления с разных форумов. Сделали бы попроще как-то, что-ли... :)

    Запостил: guest, 29 Мая 2009

    Комментарии (0) RSS

    Добавить комментарий

    Ошибка компиляции комментария:
    1. Гости могут высказаться только в понедельник, среду, четверг или воскресение
    ava Где здесь C++, guest?!
    А не использовать ли нам bbcode?
    • [b]жирный[/b] — жирный
    • [i]курсив[/i] — курсив
    • [u]подчеркнутый[/u] — подчеркнутый
    • [s]перечеркнутый[/s] — перечеркнутый
    • [blink]мигающий[/blink] — мигающий
    • [color=red]цвет[/color] — цвет (подробнее)
    • [size=20]размер[/size] — размер (подробнее)
    • [code=<language>]some code[/code] (подробнее)
    Проверочный код