[PHP] OO (de)(en)coder

Pagina: 1
Acties:

  • vinnux
  • Registratie: Maart 2001
  • Niet online
Bij het mailen wordt er vaak gebruik gemaakt van een charset of een encoding.
Nou ben ik bezig om een PHP klasse te schrijven die stukken tekst van en naar bepaalde charset's kunnen coderen en decoderen.
Echter schiet het niet echt op. Op het moment heb ik alleen maar een base64 encoder.
Binnen PHP kon ik er niet meer vinden, zonder dat daarvoor extra instellingen van php voor nodig waren zoals ondersteuning van IMAP. En dat wil ik dus niet.

Hier een aantal kleine vraagjes die ik graag beantwoord ziet :
- Wanneer ik een stuk tekst terug krijg van een form veld (b.v. textarea) in b.v. $HTTP_POST_VARS wat voor een charset is dat dan ? Of is dat weer afhankelijk van de browser ?

- Welke charsets worden gebruikt in een Email bericht ?

- Is er code om stukken tekst naar deze charsets te encoderen en te decoderen ?

- Hoe laat ik bijvoorbeeld het EURO (€) teken goed zien in een email bericht ?

Nou ik hoop dat iemand mij een duwtje in de goede richting kan geven ! Misschien een wizzkid B).

Hier is de klasse in php waar de (de)(en)coders in zouden moeten.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?
/**
 * [public]
 * Class to Encode and Decode inputs 
 * Supported are :  
 *  Encode : base64
 *  Decode : -
 **/
class Coder{

 /**
  * [private boolean]
    * Indicates if the original input should be returned when the function endcode() or decode()
    * are called and the (de)(en)code type is not supported by this class.
    * When TRUE the input is returned.
    * When FALSE null is returned.
    * The default value is TRUE
    **/
    var $return_input = TRUE;
 /**
  * [private static Hashmap]
  * Array with all the suported Encode types.
  **/
    var $SUPORTED_ENCODE_TYPES = Array();
 /**
  * [private static Hashmap]
  * Array with all the suported Decode types.
  **/
    var $SUPORTED_DECODE_TYPES = Array();
    
 /**
  * [public]
    * Constructor for an Coder Object.
    **/
    function Coder($return_input = TRUE){
        $this->SUPORTED_ENCODE_TYPES = array(
        'base64'     => 'Base64'
        );
        $this->return_input = $return_input;
    }

    /**
     * [public void]
     * Sets the return_input variable
     */
    function setReturnInput(/*boolean*/$returnInput){
        if ($returnInput === TRUE){
            $this->return_input = TRUE;
        } else if  ($returnInput === FALSE){
            $this->return_input = FALSE;
        }
    }
    
    /**
     * [public boolean]
     * Rteurn the value of the return_input variable
     */
    function getReturnInput(){
        return $this->return_input;
    }
    
    /**
     * [public String]
     * Returns the encoded value of the toEncode variabele.
     * If the type is not supported, depending on the return_input variable, 
     * the value of the toEncode variabele or null is returned.
     */
    function encode(/*String*/$toEncode,/*String*/$type){
        $encoded = null;
        $functionName = $this->getFunctionNameForType($type,$this->SUPORTED_ENCODE_TYPES);
        if($functionName !== null){
            $functionName = 'encode' .$functionName;
            $encoded = $this->$functionName($toEncode);
        } else if($this->return_input === TRUE ) {
            $encoded = $toEncode;
        }
        return $encoded;
    }
    
    /**
     * [public String]
     * Returns the decoded value of the toDecode variabele.
     * If the type is not supported, depending on the return_input variable, 
     * the value of the toDecode variabele or null is returned.
     */
    function decode(/*String*/$toDecode,/*String*/$type){
        $decoded = null;
        $functionName = $this->getFunctionNameForType($type,$this->SUPORTED_DECODE_TYPES);
        if($functionName !== null){
            $functionName = 'decode' .$functionName;
            $decoded = $this->$functionName($toDecode);
        } else if($this->return_input === TRUE ) {
            $decoded = $toDecode;
        }
        return $decoded;
    }
    
    /**
     * [private String]
     * Checks to see if the type is suported by this class, according to the given array types.
     * When the type is supported the functioName is returned. Els null is returned.
     */
    function getFunctionNameForType(/*String*/$type,/*Hashmap*/$types){
        $functionName = null;
        if(!is_string($type)){
            return $functionName;
        } 
        $type = trim($type);
        $keys = array_keys($types);
        if(in_array($type,$keys)){
            $functionName = $types[$type];
        }
        return $functionName;
    }
    
    /**
     * Base64 Encodes a given String (toEncode varaiable)
     */
    function encodeBase64(/*String*/$toEncode){
        $encoded = base64_encode($toEncode);
        return $encoded;
    }

}
?>

Huhh :? Geen nummering hoe doet ie dat ?
Zie [PHP] Tag

edit:
Leuke die nummering :( en oranje staat niet op blauw !
Maar PHP code blijft wel mooi staan zoals ie stond :!
Alle verandering is moeilijk.
<b>?</b>

  • Dennis
  • Registratie: Februari 2001
  • Nu online
Wat je terugkrijgt als encoding van een form, hangt dat niet gewoon van het document af, dus wat je in de head-tag bepaald ?

  • vinnux
  • Registratie: Maart 2001
  • Niet online
Schop !

  • baggah
  • Registratie: December 2000
  • Laatst online: 28-08 22:47
vgouw schreef op 30 juli 2002 @ 21:17:
Bij het mailen wordt er vaak gebruik gemaakt van een charset of een encoding.
Nou ben ik bezig om een PHP klasse te schrijven die stukken tekst van en naar bepaalde charset's kunnen coderen en decoderen.
Echter schiet het niet echt op. Op het moment heb ik alleen maar een base64 encoder.
Binnen PHP kon ik er niet meer vinden, zonder dat daarvoor extra instellingen van php voor nodig waren zoals ondersteuning van IMAP. En dat wil ik dus niet.

Hier een aantal kleine vraagjes die ik graag beantwoord ziet :

- Wanneer ik een stuk tekst terug krijg van een form veld (b.v. textarea) in b.v.
$HTTP_POST_VARS wat voor een charset is dat dan ? Of is dat weer afhankelijk van de browser ?
Geen idee. Dat ligt eraan welke charset er in de html code gebruikt is en welke charset de browser gebruikt.
- Welke charsets worden gebruikt in een Email bericht ?
Welke charset niet ;) Dit is geheel afhankelijk van wat de gebuiker ingesteld heeft. Maar in principe hoort e-mail 7-bits te zijn dus alle vreemde tekens horen er gewoon niet in te zitten.
- Is er code om stukken tekst naar deze charsets te encoderen en te decoderen ?
iconv
- Hoe laat ik bijvoorbeeld het EURO (€) teken goed zien in een email bericht ?
Niet >:) Dit ligt geheel aan de instellingen van de ontvangende pc.

Wat je eigenlijk moet doen is een html e-mail sturen met daar in de html een charset aangeven. Dan kan je de goede charset kiezen voor je EURO teken.

Verwijderd

e-mail hoeft niet per se 7 bits te zijn, hoe stel je je anders voor dat er attachments verstuurd worden ;)

in e-mail wordt er 7 bits gebruikt voor plain text mail, dus zonder gare tekens... 8 bits voor mail met gare tekens als euro enz. en base64 voor de meeste attachments... de base64 is gewoon base64_en/decode();, de 8bits is imap_8bit() (er zijn geen andere functies voor) en de 7bits heb je niet echt nodig, dat is gewoon plain text...

Verwijderd

Baggah schreef op 31 juli 2002 @ 13:04:
[...]
Niet >:) Dit ligt geheel aan de instellingen van de ontvangende pc.

Wat je eigenlijk moet doen is een html e-mail sturen met daar in de html een charset aangeven. Dan kan je de goede charset kiezen voor je EURO teken.
als ik me niet vergis is euro teken gewoon 8 bits, maar dan blijft het inderdaad wel aan de instellingen van de ontvangende client liggen, of zijn e-mail client 8 bits ondersteund... zo ver ik weet zijn er tegenwoordig maar bar weinig die dat niet ondersteunen... html lijkt me een beetje overbodig
Pagina: 1