Autor Zpráva
František
Profil *
Dobrý den,
používám PPHMailer, ale vyskakuje mi tato chyba: Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in

  public function EncodeQ($str, $position = 'text') {
    // There should not be any EOL in the string
    $encoded = preg_replace('/[\r\n]*/', '', $str);

    switch (strtolower($position)) {
      case 'phrase':
        $encoded = preg_replace("/([^A-Za-z0-9!*+\/ -])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded);
        break;
      case 'comment':
        $encoded = preg_replace("/([\(\)\"])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded);
      case 'text':
      default:
        // Replace every high ascii, control =, ? and _ characters
        //TODO using /e (equivalent to eval()) is probably not a good idea
        $encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e',
                                "'='.sprintf('%02X', ord(stripslashes('\\1')))", $encoded);
        break;
    }

    // Replace every spaces to _ (more readable than =20)
    $encoded = str_replace(' ', '_', $encoded);

    return $encoded;
  }
řádek s chybou:
$encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e',
                                "'='.sprintf('%02X', ord(stripslashes('\\1')))", $encoded);

Bohužel nevím jak bych to měl nahradit pomocí callbacku, můžete mi prosím poradit.

Děkuji
Keeehi
Profil
$encoded = preg_replace_callback('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/', function ($match) {
    return '='.sprintf('%02X', ord(stripslashes($matches[1])));
}, $encoded);
Taps
Profil
František:
a používáš poslední verzi phpmailer?
František
Profil *
Taps:
používám tuto: Version: 5.2
měl bych mít novější?


Keeehi:
Když nahradím
$encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e',
                                "'='.sprintf('%02X', ord(stripslashes('\\1')))", $encoded);

tvým kódem
$encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/', function ($match) {
    return '='.sprintf('%02X', ord(stripslashes($matches[1])));
}, $encoded);
mám tuto chybu:
Catchable fatal error: Object of class Closure could not be converted to string in
Keeehi
Profil
Zapomněl jsem změnit tu funkci na preg_replace_callback dle té chybové hlášky. V původním příspěvku jsem to opravil.

používám tuto: Version: 5.2
měl bych mít novější?
Verze 5.2 je označena jako zastaralá a už není aktivně vyvíjena. Jsou pro ni vydávány jen bezpečnostní opravy. Nejnovější verze je 6.0.2 (stará 19 hodin).
František
Profil *
Keeehi:
Aha. Děkuji za info. Když budu chtít přejít na tu novou bude jí stačit aktualizovat (překopírovat soubory) a nastavit smtp atd? A nebo bude potřeba ještě nějaká změna v kódech?
Keeehi
Profil
František:
nebo bude potřeba ještě nějaká změna v kódech?
Spíš tato varianta. Ale není to nic těžkého. Je k tomu i příručka.
František
Profil *
Ještě mám dotaz k tomu kódů. Teprve nyní jsem měl čas vyzkoušet, chybová hláška sice žádná není ale v předmětu zprávy teď nefunguje diakritika. Znaky s diakritikou to vynechává v outlooku to dokonce zastaví vypisování předmětu při nalezení prvního znaku s diakritikou.
$encoded = preg_replace_callback('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/', function ($match) {
    return '='.sprintf('%02X', ord(stripslashes($matches[1])));
}, $encoded);



Přepsal jsem ord(stripslashes($matches[1]))); na ord(stripslashes($match[1]))); a vypadá to že to běhá.
Je to takto v pořádku?
Keeehi
Profil
František:
Ano, takto je správně. Jen překlep. Kdyby jsi měl ale zapnuté vypisování všech hlášek, tak by se určitě jedna vypsala.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0