Autor | Zpráva | ||
---|---|---|---|
František Profil * |
#1 · Zasláno: 1. 12. 2017, 10:23:48
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; } $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 |
#3 · Zasláno: 1. 12. 2017, 11:53:38
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); Catchable fatal error: Object of class Closure could not be converted to string in |
||
Keeehi Profil |
#5 · Zasláno: 1. 12. 2017, 13:03:12
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 * |
#6 · Zasláno: 1. 12. 2017, 13:21:52
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 |
#7 · Zasláno: 1. 12. 2017, 15:19:52
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. |
||
Časová prodleva: 7 dní
|
|||
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 |
#9 · Zasláno: 8. 12. 2017, 11:23:54
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. |
||
Časová prodleva: 5 let
|
0