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

View File

@ -772,6 +772,18 @@ function convert_chars($content, $deprecated = '') {
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.
*
@ -788,9 +800,10 @@ function funky_javascript_fix($text) {
// Fixes for browsers' javascript bugs
global $is_macIE, $is_winIE;
/** @todo use preg_replace_callback() instead */
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;
}