laipower/wp-content/plugins/w3-total-cache/lib/Google/Utils.php

152 lines
4.6 KiB
PHP

<?php
/**
* File: Utils.php
*
* @package W3TC
*/
/**
* Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Collection of static utility methods used for convenience across
* the client library.
*
* @author Chirag Shah <chirags@google.com>
*/
class W3TCG_Google_Utils {
/**
* URL safe base 64 encoder function
*
* @param string $data URL to be base 64 encoded.
*
* @return string
*/
public static function urlSafeB64Encode( $data ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid
$b64 = base64_encode( $data ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode
$b64 = str_replace(
array( '+', '/', '\r', '\n', '=' ),
array( '-', '_' ),
$b64
);
return $b64;
}
/**
* URL safe base 64 de-coder function
*
* @param string $b64 Base 64 encoded string.
*
* @return string
*/
public static function urlSafeB64Decode( $b64 ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid
$b64 = str_replace(
array( '-', '_' ),
array( '+', '/' ),
$b64
);
return base64_decode( $b64 ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_decode
}
/**
* Misc function used to count the number of bytes in a post body, in the
* world of multi-byte chars and the unpredictability of
* strlen/mb_strlen/sizeof, this is the only way to do that in a sane
* manner at the moment.
*
* This algorithm was originally developed for the
* Solar Framework by Paul M. Jones
*
* @link http://solarphp.com/
* @link http://svn.solarphp.com/core/trunk/Solar/Json.php
* @link http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Json/Decoder.php
* @param string $str String to get length of.
* @return int The number of bytes in a string.
*/
public static function getStrLen( $str ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid
$strlen_var = strlen( $str );
$ret = 0;
for ( $count = 0; $count < $strlen_var; ++ $count ) {
$ordinal_value = ord( $str[ $ret ] );
switch ( true ) {
case ( ( $ordinal_value >= 0x20 ) && ( $ordinal_value <= 0x7F ) ):
// characters U-00000000 - U-0000007F (same as ASCII).
$ret ++;
break;
case ( ( $ordinal_value & 0xE0 ) === 0xC0 ):
// characters U-00000080 - U-000007FF, mask 110XXXXX.
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8.
$ret += 2;
break;
case ( ( $ordinal_value & 0xF0 ) === 0xE0 ):
// characters U-00000800 - U-0000FFFF, mask 1110XXXX.
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8.
$ret += 3;
break;
case ( ( $ordinal_value & 0xF8 ) === 0xF0 ):
// characters U-00010000 - U-001FFFFF, mask 11110XXX.
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8.
$ret += 4;
break;
case ( ( $ordinal_value & 0xFC ) === 0xF8 ):
// characters U-00200000 - U-03FFFFFF, mask 111110XX.
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8.
$ret += 5;
break;
case ( ( $ordinal_value & 0xFE ) === 0xFC ):
// characters U-04000000 - U-7FFFFFFF, mask 1111110X.
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8.
$ret += 6;
break;
default:
$ret ++;
}
}
return $ret;
}
/**
* Normalize all keys in an array to lower-case.
*
* @param array $arr Array to normalize all keys to lowercase.
* @return array Normalized array.
*/
public static function normalize( $arr ) {
if ( ! is_array( $arr ) ) {
return array();
}
$normalized = array();
foreach ( $arr as $key => $val ) {
$normalized[ strtolower( $key ) ] = $val;
}
return $normalized;
}
/**
* Convert a string to camelCase
*
* @param string $value String to convert to camelCase.
* @return string
*/
public static function camelCase( $value ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid
$value = ucwords( str_replace( array( '-', '_' ), ' ', $value ) );
$value = str_replace( ' ', '', $value );
$value[0] = strtolower( $value[0] );
return $value;
}
}