function wp_set_current_user($id, $name = '') {
global $current_user;
- if ( isset($current_user) && ($id == $current_user->ID) )
+ if ( isset( $current_user ) && ( $current_user instanceof WP_User ) && ( $id == $current_user->ID ) )
return $current_user;
- $current_user = new WP_User($id, $name);
+ $current_user = new WP_User( $id, $name );
- setup_userdata($current_user->ID);
+ setup_userdata( $current_user->ID );
do_action('set_current_user');
function get_currentuserinfo() {
global $current_user;
- if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST )
+ if ( ! empty( $current_user ) ) {
+ if ( $current_user instanceof WP_User )
+ return;
+
+ // Upgrade stdClass to WP_User
+ if ( is_object( $current_user ) && isset( $current_user->ID ) ) {
+ $cur_id = $current_user->ID;
+ $current_user = null;
+ wp_set_current_user( $cur_id );
+ return;
+ }
+
+ // $current_user has a junk value. Force to WP_User with ID 0.
+ $current_user = null;
+ wp_set_current_user( 0 );
return false;
+ }
- if ( ! empty($current_user) )
- return;
+ if ( defined('XMLRPC_REQUEST') && XMLRPC_REQUEST ) {
+ wp_set_current_user( 0 );
+ return false;
+ }
if ( ! $user = wp_validate_auth_cookie() ) {
- if ( is_blog_admin() || is_network_admin() || empty($_COOKIE[LOGGED_IN_COOKIE]) || !$user = wp_validate_auth_cookie($_COOKIE[LOGGED_IN_COOKIE], 'logged_in') ) {
- wp_set_current_user(0);
+ if ( is_blog_admin() || is_network_admin() || empty( $_COOKIE[LOGGED_IN_COOKIE] ) || !$user = wp_validate_auth_cookie( $_COOKIE[LOGGED_IN_COOKIE], 'logged_in' ) ) {
+ wp_set_current_user( 0 );
return false;
}
}
- wp_set_current_user($user);
+ wp_set_current_user( $user );
}
endif;
*
* @since 2.8.0
*
- * @param string $field The field to retrieve the user with. id | slug | email | login
- * @param int|string $value A value for $field. A user ID, slug, email address, or login name.
+ * @param string $field The field to retrieve the user with. id | slug | email | login
+ * @param int|string $value A value for $field. A user ID, slug, email address, or login name.
* @return bool|object False on failure, WP_User object on success
*/
function get_user_by( $field, $value ) {
function cache_users( $user_ids ) {
global $wpdb;
- $clean = array();
- foreach ( $user_ids as $id ) {
- $id = (int) $id;
- if ( !wp_cache_get( $id, 'users' ) ) {
- $clean[] = $id;
- }
- }
+ $clean = _get_non_cached_ids( $user_ids, 'users' );
if ( empty( $clean ) )
return;
// Allow a grace period for POST and AJAX requests
if ( defined('DOING_AJAX') || 'POST' == $_SERVER['REQUEST_METHOD'] )
- $expired += 3600;
+ $expired += HOUR_IN_SECONDS;
// Quick check to see if an honest cookie has expired
if ( $expired < time() ) {
function wp_clear_auth_cookie() {
do_action('clear_auth_cookie');
- setcookie(AUTH_COOKIE, ' ', time() - 31536000, ADMIN_COOKIE_PATH, COOKIE_DOMAIN);
- setcookie(SECURE_AUTH_COOKIE, ' ', time() - 31536000, ADMIN_COOKIE_PATH, COOKIE_DOMAIN);
- setcookie(AUTH_COOKIE, ' ', time() - 31536000, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN);
- setcookie(SECURE_AUTH_COOKIE, ' ', time() - 31536000, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN);
- setcookie(LOGGED_IN_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN);
- setcookie(LOGGED_IN_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN);
+ setcookie( AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, ADMIN_COOKIE_PATH, COOKIE_DOMAIN );
+ setcookie( SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, ADMIN_COOKIE_PATH, COOKIE_DOMAIN );
+ setcookie( AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN );
+ setcookie( SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN );
+ setcookie( LOGGED_IN_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
+ setcookie( LOGGED_IN_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
// Old cookies
- setcookie(AUTH_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN);
- setcookie(AUTH_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN);
- setcookie(SECURE_AUTH_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN);
- setcookie(SECURE_AUTH_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN);
+ setcookie( AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
+ setcookie( AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
+ setcookie( SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
+ setcookie( SECURE_AUTH_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
// Even older cookies
- setcookie(USER_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN);
- setcookie(PASS_COOKIE, ' ', time() - 31536000, COOKIEPATH, COOKIE_DOMAIN);
- setcookie(USER_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN);
- setcookie(PASS_COOKIE, ' ', time() - 31536000, SITECOOKIEPATH, COOKIE_DOMAIN);
+ setcookie( USER_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
+ setcookie( PASS_COOKIE, ' ', time() - YEAR_IN_SECONDS, COOKIEPATH, COOKIE_DOMAIN );
+ setcookie( USER_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
+ setcookie( PASS_COOKIE, ' ', time() - YEAR_IN_SECONDS, SITECOOKIEPATH, COOKIE_DOMAIN );
}
endif;
function is_user_logged_in() {
$user = wp_get_current_user();
- if ( empty( $user->ID ) )
+ if ( ! $user->exists() )
return false;
return true;
// If https is required and request is http, redirect
if ( $secure && !is_ssl() && false !== strpos($_SERVER['REQUEST_URI'], 'wp-admin') ) {
- if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
- wp_redirect(preg_replace('|^http://|', 'https://', $_SERVER['REQUEST_URI']));
+ if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'http' ) ) {
+ wp_redirect( set_url_scheme( $_SERVER['REQUEST_URI'], 'https' ) );
exit();
} else {
- wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
+ wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
exit();
}
}
// If the user wants ssl but the session is not ssl, redirect.
if ( !$secure && get_user_option('use_ssl', $user_id) && false !== strpos($_SERVER['REQUEST_URI'], 'wp-admin') ) {
- if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
- wp_redirect(preg_replace('|^http://|', 'https://', $_SERVER['REQUEST_URI']));
+ if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'http' ) ) {
+ wp_redirect( set_url_scheme( $_SERVER['REQUEST_URI'], 'https' ) );
exit();
} else {
- wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
+ wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
exit();
}
}
// The cookie is no good so force login
nocache_headers();
- if ( is_ssl() )
- $proto = 'https://';
- else
- $proto = 'http://';
-
- $redirect = ( strpos($_SERVER['REQUEST_URI'], '/options.php') && wp_get_referer() ) ? wp_get_referer() : $proto . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+ $redirect = ( strpos( $_SERVER['REQUEST_URI'], '/options.php' ) && wp_get_referer() ) ? wp_get_referer() : set_url_scheme( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
$login_url = wp_login_url($redirect, true);
$result = wp_verify_nonce( $nonce, $action );
- if ( $die && false == $result )
- die('-1');
+ if ( $die && false == $result ) {
+ if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
+ wp_die( -1 );
+ else
+ die( '-1' );
+ }
do_action('check_ajax_referer', $action, $result);
* WordPress host string and $location host string.
*
* @param string $location The redirect to validate
- * @param string $default The value to return is $location is not allowed
+ * @param string $default The value to return if $location is not allowed
* @return string redirect-sanitized URL
**/
function wp_validate_redirect($location, $default = '') {
* @param string $plaintext_pass Optional. The user's plaintext password
*/
function wp_new_user_notification($user_id, $plaintext_pass = '') {
- $user = new WP_User($user_id);
+ $user = get_userdata( $user_id );
$user_login = stripslashes($user->user_login);
$user_email = stripslashes($user->user_email);
* @return int
*/
function wp_nonce_tick() {
- $nonce_life = apply_filters('nonce_life', 86400);
+ $nonce_life = apply_filters( 'nonce_life', DAY_IN_SECONDS );
return ceil(time() / ( $nonce_life / 2 ));
}
function wp_verify_nonce($nonce, $action = -1) {
$user = wp_get_current_user();
$uid = (int) $user->ID;
+ if ( ! $uid )
+ $uid = apply_filters( 'nonce_user_logged_out', $uid, $action );
$i = wp_nonce_tick();
// Nonce generated 0-12 hours ago
- if ( substr(wp_hash($i . $action . $uid, 'nonce'), -12, 10) == $nonce )
+ if ( substr(wp_hash($i . $action . $uid, 'nonce'), -12, 10) === $nonce )
return 1;
// Nonce generated 12-24 hours ago
- if ( substr(wp_hash(($i - 1) . $action . $uid, 'nonce'), -12, 10) == $nonce )
+ if ( substr(wp_hash(($i - 1) . $action . $uid, 'nonce'), -12, 10) === $nonce )
return 2;
// Invalid nonce
return false;
function wp_create_nonce($action = -1) {
$user = wp_get_current_user();
$uid = (int) $user->ID;
+ if ( ! $uid )
+ $uid = apply_filters( 'nonce_user_logged_out', $uid, $action );
$i = wp_nonce_tick();
if ( !function_exists('wp_salt') ) :
/**
- * Get salt to add to hashes to help prevent attacks.
- *
- * The secret key is located in two places: the database in case the secret key
- * isn't defined in the second place, which is in the wp-config.php file. If you
- * are going to set the secret key, then you must do so in the wp-config.php
- * file.
+ * Get salt to add to hashes.
*
- * The secret key in the database is randomly generated and will be appended to
- * the secret key that is in wp-config.php file in some instances. It is
- * important to have the secret key defined or changed in wp-config.php.
+ * Salts are created using secret keys. Secret keys are located in two places:
+ * in the database and in the wp-config.php file. The secret key in the database
+ * is randomly generated and will be appended to the secret keys in wp-config.php.
*
- * If you have installed WordPress 2.5 or later, then you will have the
- * SECRET_KEY defined in the wp-config.php already. You will want to change the
- * value in it because hackers will know what it is. If you have upgraded to
- * WordPress 2.5 or later version from a version before WordPress 2.5, then you
- * should add the constant to your wp-config.php file.
- *
- * Below is an example of how the SECRET_KEY constant is defined with a value.
- * You must not copy the below example and paste into your wp-config.php. If you
- * need an example, then you can have a
- * {@link https://api.wordpress.org/secret-key/1.1/ secret key created} for you.
+ * The secret keys in wp-config.php should be updated to strong, random keys to maximize
+ * security. Below is an example of how the secret key constants are defined.
+ * Do not paste this example directly into wp-config.php. Instead, have a
+ * {@link https://api.wordpress.org/secret-key/1.1/salt/ secret key created} just
+ * for you.
*
* <code>
- * define('SECRET_KEY', 'mAry1HadA15|\/|b17w55w1t3asSn09w');
+ * define('AUTH_KEY', ' Xakm<o xQy rw4EMsLKM-?!T+,PFF})H4lzcW57AF0U@N@< >M%G4Yt>f`z]MON');
+ * define('SECURE_AUTH_KEY', 'LzJ}op]mr|6+![P}Ak:uNdJCJZd>(Hx.-Mh#Tz)pCIU#uGEnfFz|f ;;eU%/U^O~');
+ * define('LOGGED_IN_KEY', '|i|Ux`9<p-h$aFf(qnT:sDO:D1P^wZ$$/Ra@miTJi9G;ddp_<q}6H1)o|a +&JCM');
+ * define('NONCE_KEY', '%:R{[P|,s.KuMltH5}cI;/k<Gx~j!f0I)m_sIyu+&NJZ)-iO>z7X>QYR0Z_XnZ@|');
+ * define('AUTH_SALT', 'eZyT)-Naw]F8CwA*VaW#q*|.)g@o}||wf~@C-YSt}(dh_r6EbI#A,y|nU2{B#JBW');
+ * define('SECURE_AUTH_SALT', '!=oLUTXh,QW=H `}`L|9/^4-3 STz},T(w}W<I`.JjPi)<Bmf1v,HpGe}T1:Xt7n');
+ * define('LOGGED_IN_SALT', '+XSqHc;@Q*K_b|Z?NC[3H!!EONbh.n<+=uKR:>*c(u`g~EJBf#8u#R{mUEZrozmm');
+ * define('NONCE_SALT', 'h`GXHhD>SLWVfg1(1(N{;.V!MoE(SfbA_ksP@&`+AycHcAV$+?@3q+rxV{%^VyKT');
* </code>
*
* Salting passwords helps against tools which has stored hashed values of
- * common dictionary strings. The added values makes it harder to crack if given
- * salt string is not weak.
+ * common dictionary strings. The added values makes it harder to crack.
*
* @since 2.5
- * @link https://api.wordpress.org/secret-key/1.1/ Create a Secret Key for wp-config.php
*
- * @param string $scheme Authentication scheme
+ * @link https://api.wordpress.org/secret-key/1.1/salt/ Create secrets for wp-config.php
+ *
+ * @param string $scheme Authentication scheme (auth, secure_auth, logged_in, nonce)
* @return string Salt value
*/
-function wp_salt($scheme = 'auth') {
- global $wp_default_secret_key;
- $secret_key = '';
- if ( defined('SECRET_KEY') && ('' != SECRET_KEY) && ( $wp_default_secret_key != SECRET_KEY) )
- $secret_key = SECRET_KEY;
-
- if ( 'auth' == $scheme ) {
- if ( defined('AUTH_KEY') && ('' != AUTH_KEY) && ( $wp_default_secret_key != AUTH_KEY) )
- $secret_key = AUTH_KEY;
-
- if ( defined('AUTH_SALT') && ('' != AUTH_SALT) && ( $wp_default_secret_key != AUTH_SALT) ) {
- $salt = AUTH_SALT;
- } elseif ( defined('SECRET_SALT') && ('' != SECRET_SALT) && ( $wp_default_secret_key != SECRET_SALT) ) {
- $salt = SECRET_SALT;
- } else {
- $salt = get_site_option('auth_salt');
- if ( empty($salt) ) {
- $salt = wp_generate_password( 64, true, true );
- update_site_option('auth_salt', $salt);
- }
- }
- } elseif ( 'secure_auth' == $scheme ) {
- if ( defined('SECURE_AUTH_KEY') && ('' != SECURE_AUTH_KEY) && ( $wp_default_secret_key != SECURE_AUTH_KEY) )
- $secret_key = SECURE_AUTH_KEY;
-
- if ( defined('SECURE_AUTH_SALT') && ('' != SECURE_AUTH_SALT) && ( $wp_default_secret_key != SECURE_AUTH_SALT) ) {
- $salt = SECURE_AUTH_SALT;
- } else {
- $salt = get_site_option('secure_auth_salt');
- if ( empty($salt) ) {
- $salt = wp_generate_password( 64, true, true );
- update_site_option('secure_auth_salt', $salt);
+function wp_salt( $scheme = 'auth' ) {
+ static $cached_salts = array();
+ if ( isset( $cached_salts[ $scheme ] ) )
+ return apply_filters( 'salt', $cached_salts[ $scheme ], $scheme );
+
+ static $duplicated_keys;
+ if ( null === $duplicated_keys ) {
+ $duplicated_keys = array( 'put your unique phrase here' => true );
+ foreach ( array( 'AUTH', 'SECURE_AUTH', 'LOGGED_IN', 'NONCE', 'SECRET' ) as $first ) {
+ foreach ( array( 'KEY', 'SALT' ) as $second ) {
+ if ( ! defined( "{$first}_{$second}" ) )
+ continue;
+ $value = constant( "{$first}_{$second}" );
+ $duplicated_keys[ $value ] = isset( $duplicated_keys[ $value ] );
}
}
- } elseif ( 'logged_in' == $scheme ) {
- if ( defined('LOGGED_IN_KEY') && ('' != LOGGED_IN_KEY) && ( $wp_default_secret_key != LOGGED_IN_KEY) )
- $secret_key = LOGGED_IN_KEY;
+ }
- if ( defined('LOGGED_IN_SALT') && ('' != LOGGED_IN_SALT) && ( $wp_default_secret_key != LOGGED_IN_SALT) ) {
- $salt = LOGGED_IN_SALT;
- } else {
- $salt = get_site_option('logged_in_salt');
- if ( empty($salt) ) {
- $salt = wp_generate_password( 64, true, true );
- update_site_option('logged_in_salt', $salt);
+ $key = $salt = '';
+ if ( defined( 'SECRET_KEY' ) && SECRET_KEY && empty( $duplicated_keys[ SECRET_KEY ] ) )
+ $key = SECRET_KEY;
+ if ( 'auth' == $scheme && defined( 'SECRET_SALT' ) && SECRET_SALT && empty( $duplicated_keys[ SECRET_SALT ] ) )
+ $salt = SECRET_SALT;
+
+ if ( in_array( $scheme, array( 'auth', 'secure_auth', 'logged_in', 'nonce' ) ) ) {
+ foreach ( array( 'key', 'salt' ) as $type ) {
+ $const = strtoupper( "{$scheme}_{$type}" );
+ if ( defined( $const ) && constant( $const ) && empty( $duplicated_keys[ constant( $const ) ] ) ) {
+ $$type = constant( $const );
+ } elseif ( ! $$type ) {
+ $$type = get_site_option( "{$scheme}_{$type}" );
+ if ( ! $$type ) {
+ $$type = wp_generate_password( 64, true, true );
+ update_site_option( "{$scheme}_{$type}", $$type );
+ }
}
}
- } elseif ( 'nonce' == $scheme ) {
- if ( defined('NONCE_KEY') && ('' != NONCE_KEY) && ( $wp_default_secret_key != NONCE_KEY) )
- $secret_key = NONCE_KEY;
-
- if ( defined('NONCE_SALT') && ('' != NONCE_SALT) && ( $wp_default_secret_key != NONCE_SALT) ) {
- $salt = NONCE_SALT;
- } else {
- $salt = get_site_option('nonce_salt');
- if ( empty($salt) ) {
- $salt = wp_generate_password( 64, true, true );
- update_site_option('nonce_salt', $salt);
+ } else {
+ if ( ! $key ) {
+ $key = get_site_option( 'secret_key' );
+ if ( ! $key ) {
+ $key = wp_generate_password( 64, true, true );
+ update_site_option( 'secret_key', $key );
}
}
- } else {
- // ensure each auth scheme has its own unique salt
- $salt = hash_hmac('md5', $scheme, $secret_key);
+ $salt = hash_hmac( 'md5', $scheme, $key );
}
- return apply_filters('salt', $secret_key . $salt, $scheme);
+ $cached_salts[ $scheme ] = $key . $salt;
+ return apply_filters( 'salt', $cached_salts[ $scheme ], $scheme );
}
endif;
if ( empty($wp_hasher) ) {
require_once( ABSPATH . 'wp-includes/class-phpass.php');
// By default, use the portable hash from phpass
- $wp_hasher = new PasswordHash(8, TRUE);
+ $wp_hasher = new PasswordHash(8, true);
}
return $wp_hasher->HashPassword($password);
if ( empty($wp_hasher) ) {
require_once( ABSPATH . 'wp-includes/class-phpass.php');
// By default, use the portable hash from phpass
- $wp_hasher = new PasswordHash(8, TRUE);
+ $wp_hasher = new PasswordHash(8, true);
}
$check = $wp_hasher->CheckPassword($password, $hash);
endif;
if ( !function_exists('wp_rand') ) :
- /**
+/**
* Generates a random number
*
* @since 2.6.2
*
- * @param int $min Lower limit for the generated number (optional, default is 0)
- * @param int $max Upper limit for the generated number (optional, default is 4294967295)
+ * @param int $min Lower limit for the generated number
+ * @param int $max Upper limit for the generated number
* @return int A random number between min and max
*/
function wp_rand( $min = 0, $max = 0 ) {
$value = abs(hexdec($value));
+ // Some misconfigured 32bit environments (Entropy PHP, for example) truncate integers larger than PHP_INT_MAX to PHP_INT_MAX rather than overflowing them to floats.
+ $max_random_number = 3000000000 === 2147483647 ? (float) "4294967295" : 4294967295; // 4294967295 = 0xffffffff
+
// Reduce the value to be within the min - max range
- // 4294967295 = 0xffffffff = max random number
if ( $max != 0 )
- $value = $min + (($max - $min + 1) * ($value / (4294967295 + 1)));
+ $value = $min + ( $max - $min + 1 ) * $value / ( $max_random_number + 1 );
return abs(intval($value));
}
* @param int|string|object $id_or_email A user ID, email address, or comment object
* @param int $size Size of the avatar image
* @param string $default URL to a default image to use if no avatar is available
- * @param string $alt Alternate text to use in image tag. Defaults to blank
+ * @param string $alt Alternative text to use in image tag. Defaults to blank
* @return string <img> tag for the user's avatar
*/
function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false ) {
}
if ( !empty($email) )
- $email_hash = md5( strtolower( $email ) );
+ $email_hash = md5( strtolower( trim( $email ) ) );
if ( is_ssl() ) {
$host = 'https://secure.gravatar.com';
if ( 'mystery' == $default )
$default = "$host/avatar/ad516503a11cd5ca435acc9bb6523536?s={$size}"; // ad516503a11cd5ca435acc9bb6523536 == md5('unknown@gravatar.com')
elseif ( 'blank' == $default )
- $default = includes_url('images/blank.gif');
+ $default = $email ? 'blank' : includes_url( 'images/blank.gif' );
elseif ( !empty($email) && 'gravatar_default' == $default )
$default = '';
elseif ( 'gravatar_default' == $default )
- $default = "$host/avatar/s={$size}";
+ $default = "$host/avatar/?s={$size}";
elseif ( empty($email) )
$default = "$host/avatar/?d=$default&s={$size}";
elseif ( strpos($default, 'http://') === 0 )
$left_string = normalize_whitespace($left_string);
$right_string = normalize_whitespace($right_string);
- $left_lines = split("\n", $left_string);
- $right_lines = split("\n", $right_string);
+ $left_lines = explode("\n", $left_string);
+ $right_lines = explode("\n", $right_string);
$text_diff = new Text_Diff($left_lines, $right_lines);
$renderer = new WP_Text_Diff_Renderer_Table();