Eliminate preg_replace with /e. Props tbaboon. fixes #8689

git-svn-id: http://svn.automattic.com/wordpress/trunk@11098 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
ryan 2009-04-27 16:17:24 +00:00
parent 63c40f644d
commit f52d1dd2b0
2 changed files with 31 additions and 6 deletions

View File

@ -1402,6 +1402,15 @@ class PHPMailer {
return trim($output); return trim($output);
} }
/**
* Callback for converting to "=XX".
* @access private
* @return string
*/
function EncodeQ_callback ($matches) {
return "=".sprintf("%02X", ord($matches[1]));
}
/** /**
* Encode string to q encoding. * Encode string to q encoding.
* @access private * @access private
@ -1413,15 +1422,18 @@ class PHPMailer {
switch (strtolower($position)) { switch (strtolower($position)) {
case 'phrase': case 'phrase':
$encoded = preg_replace("/([^A-Za-z0-9!*+\/ -])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); $encoded = preg_replace_callback("/([^A-Za-z0-9!*+\/ -])/",
"EncodeQ_callback", $encoded);
break; break;
case 'comment': case 'comment':
$encoded = preg_replace("/([\(\)\"])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded); $encoded = preg_replace_callback("/([\(\)\"])/",
"EncodeQ_callback", $encoded);
break;
case 'text': case 'text':
default: default:
/* Replace every high ascii, control =, ? and _ characters */ /* Replace every high ascii, control =, ? and _ characters */
$encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e', $encoded = preg_replace_callback('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/',
"'='.sprintf('%02X', ord('\\1'))", $encoded); "EncodeQ_callback", $encoded);
break; break;
} }

View File

@ -772,6 +772,18 @@ function convert_chars($content, $deprecated = '') {
return $content; return $content;
} }
/**
* Callback used to change %uXXXX to &#YYY; syntax
*
* @since 2.8?
*
* @param array $matches Single Match
* @return string An HTML entity
*/
function funky_javascript_callback($matches) {
return "&#".base_convert($matches[1],16,10).";";
}
/** /**
* Fixes javascript bugs in browsers. * Fixes javascript bugs in browsers.
* *
@ -788,9 +800,10 @@ function funky_javascript_fix($text) {
// Fixes for browsers' javascript bugs // Fixes for browsers' javascript bugs
global $is_macIE, $is_winIE; global $is_macIE, $is_winIE;
/** @todo use preg_replace_callback() instead */
if ( $is_winIE || $is_macIE ) if ( $is_winIE || $is_macIE )
$text = preg_replace("/\%u([0-9A-F]{4,4})/e", "'&#'.base_convert('\\1',16,10).';'", $text); $text = preg_replace_callback("/\%u([0-9A-F]{4,4})/",
"funky_javascript_callback",
$text);
return $text; return $text;
} }