Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/clone/wp-conte.../themes/Divi/core/componen.../data
File: Utils.php
<?php
[0] Fix | Delete
[1] Fix | Delete
/**
[2] Fix | Delete
* Utility class for manipulating various data formats. Includes methods for
[3] Fix | Delete
* transforming array data to another format based on key mapping, methods for
[4] Fix | Delete
* generating XML-RPC method call strings, methods for working with arrays, and more.
[5] Fix | Delete
*
[6] Fix | Delete
* @since 3.0.62
[7] Fix | Delete
*
[8] Fix | Delete
* @package ET\Core\Data
[9] Fix | Delete
*/
[10] Fix | Delete
class ET_Core_Data_Utils {
[11] Fix | Delete
[12] Fix | Delete
private static $_instance;
[13] Fix | Delete
[14] Fix | Delete
private $_pick;
[15] Fix | Delete
private $_pick_value = '_undefined_';
[16] Fix | Delete
private $_sort_by;
[17] Fix | Delete
[18] Fix | Delete
/**
[19] Fix | Delete
* Sort arguments being passed through to callbacks.
[20] Fix | Delete
* See self::_user_sort()
[21] Fix | Delete
*
[22] Fix | Delete
* @var array
[23] Fix | Delete
*/
[24] Fix | Delete
protected $sort_arguments = array(
[25] Fix | Delete
'array' => array(),
[26] Fix | Delete
'array_map' => array(),
[27] Fix | Delete
'sort' => '__return_false',
[28] Fix | Delete
'comparison' => '__return_false',
[29] Fix | Delete
);
[30] Fix | Delete
[31] Fix | Delete
/**
[32] Fix | Delete
* Generate an XML-RPC array.
[33] Fix | Delete
*
[34] Fix | Delete
* @param array $values
[35] Fix | Delete
*
[36] Fix | Delete
* @return string
[37] Fix | Delete
*/
[38] Fix | Delete
private function _create_xmlrpc_array( $values ) {
[39] Fix | Delete
$output = '';
[40] Fix | Delete
[41] Fix | Delete
foreach ( $values as $value ) {
[42] Fix | Delete
$output .= $this->_create_xmlrpc_value( $value );
[43] Fix | Delete
}
[44] Fix | Delete
[45] Fix | Delete
return "<array><data>{$output}</data></array>";
[46] Fix | Delete
}
[47] Fix | Delete
[48] Fix | Delete
/**
[49] Fix | Delete
* Generate an XML-RPC struct.
[50] Fix | Delete
*
[51] Fix | Delete
* @param array $members
[52] Fix | Delete
*
[53] Fix | Delete
* @return string
[54] Fix | Delete
*/
[55] Fix | Delete
private function _create_xmlrpc_struct( $members ) {
[56] Fix | Delete
$output = '';
[57] Fix | Delete
[58] Fix | Delete
foreach ( $members as $name => $value ) {
[59] Fix | Delete
$output .= sprintf( '<member><name>%1$s</name>%2$s</member>', esc_html( $name ), $this->_create_xmlrpc_value( $value ) );
[60] Fix | Delete
}
[61] Fix | Delete
[62] Fix | Delete
return "<struct>{$output}</struct>";
[63] Fix | Delete
}
[64] Fix | Delete
[65] Fix | Delete
/**
[66] Fix | Delete
* Generate an XML-RPC value.
[67] Fix | Delete
*
[68] Fix | Delete
* @param mixed $value
[69] Fix | Delete
*
[70] Fix | Delete
* @return string
[71] Fix | Delete
*/
[72] Fix | Delete
private function _create_xmlrpc_value( $value ) {
[73] Fix | Delete
$output = '';
[74] Fix | Delete
[75] Fix | Delete
if ( is_string( $value ) ) {
[76] Fix | Delete
$value = esc_html( wp_strip_all_tags( $value ) );
[77] Fix | Delete
$output = "<string>{$value}</string>";
[78] Fix | Delete
} else if ( is_bool( $value ) ) {
[79] Fix | Delete
$value = (int) $value;
[80] Fix | Delete
$output = "<boolean>{$value}</boolean>";
[81] Fix | Delete
} else if ( is_int( $value ) ) {
[82] Fix | Delete
$output = "<int>{$value}</int>";
[83] Fix | Delete
} else if ( is_array( $value ) && $this->is_assoc_array( $value ) ) {
[84] Fix | Delete
$output = $this->_create_xmlrpc_struct( $value );
[85] Fix | Delete
} else if ( is_array( $value ) ) {
[86] Fix | Delete
$output = $this->_create_xmlrpc_array( $value );
[87] Fix | Delete
}
[88] Fix | Delete
[89] Fix | Delete
return "<value>{$output}</value>";
[90] Fix | Delete
}
[91] Fix | Delete
[92] Fix | Delete
/**
[93] Fix | Delete
* Convert a SimpleXMLElement to a native PHP data type.
[94] Fix | Delete
*
[95] Fix | Delete
* @param SimpleXMLElement $value
[96] Fix | Delete
*
[97] Fix | Delete
* @return mixed
[98] Fix | Delete
*/
[99] Fix | Delete
private function _parse_value( $value ) {
[100] Fix | Delete
switch ( true ) {
[101] Fix | Delete
case is_string( $value ):
[102] Fix | Delete
$result = $value;
[103] Fix | Delete
break;
[104] Fix | Delete
case count( $value->struct ) > 0:
[105] Fix | Delete
$result = new stdClass();
[106] Fix | Delete
[107] Fix | Delete
foreach ( $value->struct->member as $member ) {
[108] Fix | Delete
$name = (string) $member->name;
[109] Fix | Delete
$member_value = $this->_parse_value( $member->value );
[110] Fix | Delete
$result->$name = $member_value;
[111] Fix | Delete
}
[112] Fix | Delete
[113] Fix | Delete
break;
[114] Fix | Delete
case count( $value->array ) > 0:
[115] Fix | Delete
$result = array();
[116] Fix | Delete
[117] Fix | Delete
foreach ( $value->array->data->value as $array_value ) {
[118] Fix | Delete
$result[] = $this->_parse_value( $array_value );
[119] Fix | Delete
}
[120] Fix | Delete
[121] Fix | Delete
break;
[122] Fix | Delete
case count( $value->i4 ) > 0:
[123] Fix | Delete
$result = (int) $value->i4;
[124] Fix | Delete
break;
[125] Fix | Delete
case count( $value->int ) > 0:
[126] Fix | Delete
$result = (int) $value->int;
[127] Fix | Delete
break;
[128] Fix | Delete
case count( $value->boolean ) > 0:
[129] Fix | Delete
$result = (boolean) $value->boolean;
[130] Fix | Delete
break;
[131] Fix | Delete
case count( $value->double ) > 0:
[132] Fix | Delete
$result = (double) $value->double;
[133] Fix | Delete
break;
[134] Fix | Delete
default:
[135] Fix | Delete
$result = (string) $value;
[136] Fix | Delete
}
[137] Fix | Delete
[138] Fix | Delete
return $result;
[139] Fix | Delete
}
[140] Fix | Delete
[141] Fix | Delete
private function _remove_empty_directories( $path ) {
[142] Fix | Delete
if ( ! is_dir( $path ) ) {
[143] Fix | Delete
return false;
[144] Fix | Delete
}
[145] Fix | Delete
[146] Fix | Delete
$empty = true;
[147] Fix | Delete
$directory_contents = glob( untrailingslashit( $path ) . '/*' );
[148] Fix | Delete
[149] Fix | Delete
foreach ( (array) $directory_contents as $item ) {
[150] Fix | Delete
if ( ! $this->_remove_empty_directories( $item ) ) {
[151] Fix | Delete
$empty = false;
[152] Fix | Delete
}
[153] Fix | Delete
}
[154] Fix | Delete
[155] Fix | Delete
return $empty ? @rmdir( $path ) : false;
[156] Fix | Delete
}
[157] Fix | Delete
[158] Fix | Delete
public function _array_pick_callback( $item ) {
[159] Fix | Delete
$pick = $this->_pick;
[160] Fix | Delete
$value = $this->_pick_value;
[161] Fix | Delete
[162] Fix | Delete
if ( is_array( $item ) && isset( $item[ $pick ] ) ) {
[163] Fix | Delete
return '_undefined_' !== $value ? $value === $item[ $pick ] : $item[ $pick ];
[164] Fix | Delete
} else if ( is_object( $item ) && isset( $item->$pick ) ) {
[165] Fix | Delete
return '_undefined_' !== $value ? $value === $item->$pick : $item->$pick;
[166] Fix | Delete
}
[167] Fix | Delete
[168] Fix | Delete
return false;
[169] Fix | Delete
}
[170] Fix | Delete
[171] Fix | Delete
public function _array_sort_by_callback( $a, $b ) {
[172] Fix | Delete
$sort_by = $this->_sort_by;
[173] Fix | Delete
[174] Fix | Delete
if ( is_array( $a ) ) {
[175] Fix | Delete
return strcmp( $a[ $sort_by ], $b[ $sort_by ] );
[176] Fix | Delete
} else if ( is_object( $a ) ) {
[177] Fix | Delete
return strcmp( $a->$sort_by, $b->$sort_by );
[178] Fix | Delete
}
[179] Fix | Delete
[180] Fix | Delete
return 0;
[181] Fix | Delete
}
[182] Fix | Delete
[183] Fix | Delete
/**
[184] Fix | Delete
* Returns `true` if all values in `$array` are not empty, `false` otherwise.
[185] Fix | Delete
* If `$condition` is provided then values are checked against it instead of `empty()`.
[186] Fix | Delete
*
[187] Fix | Delete
* @param array $array
[188] Fix | Delete
* @param bool $condition Compare values to this instead of `empty()`. Optional.
[189] Fix | Delete
*
[190] Fix | Delete
* @return bool
[191] Fix | Delete
*/
[192] Fix | Delete
public function all( array $array, $condition = null ) {
[193] Fix | Delete
if ( null === $condition ) {
[194] Fix | Delete
foreach( $array as $key => $value ) {
[195] Fix | Delete
if ( empty( $value ) ) {
[196] Fix | Delete
return false;
[197] Fix | Delete
}
[198] Fix | Delete
}
[199] Fix | Delete
} else {
[200] Fix | Delete
foreach( $array as $key => $value ) {
[201] Fix | Delete
if ( $value !== $condition ) {
[202] Fix | Delete
return false;
[203] Fix | Delete
}
[204] Fix | Delete
}
[205] Fix | Delete
}
[206] Fix | Delete
[207] Fix | Delete
return true;
[208] Fix | Delete
}
[209] Fix | Delete
[210] Fix | Delete
/**
[211] Fix | Delete
* Flattens a multi-dimensional array.
[212] Fix | Delete
*
[213] Fix | Delete
* @since 3.0.99
[214] Fix | Delete
*
[215] Fix | Delete
* @param array $array An array to flatten.
[216] Fix | Delete
*
[217] Fix | Delete
* @return array
[218] Fix | Delete
*/
[219] Fix | Delete
function array_flatten( array $array ) {
[220] Fix | Delete
$iterator = new RecursiveIteratorIterator( new RecursiveArrayIterator( $array ) );
[221] Fix | Delete
$use_keys = true;
[222] Fix | Delete
[223] Fix | Delete
return iterator_to_array( $iterator, $use_keys );
[224] Fix | Delete
}
[225] Fix | Delete
[226] Fix | Delete
/**
[227] Fix | Delete
* Gets a value from a nested array using an address string.
[228] Fix | Delete
*
[229] Fix | Delete
* @param array $array An array which contains value located at `$address`.
[230] Fix | Delete
* @param string|array $address The location of the value within `$array` (dot notation).
[231] Fix | Delete
* @param mixed $default Value to return if not found. Default is an empty string.
[232] Fix | Delete
*
[233] Fix | Delete
* @return mixed The value, if found, otherwise $default.
[234] Fix | Delete
*/
[235] Fix | Delete
public function array_get( $array, $address, $default = '' ) {
[236] Fix | Delete
$keys = is_array( $address ) ? $address : explode( '.', $address );
[237] Fix | Delete
$value = $array;
[238] Fix | Delete
[239] Fix | Delete
foreach ( $keys as $key ) {
[240] Fix | Delete
if ( '[' === $key[0] ) {
[241] Fix | Delete
$index = substr( $key, 1, -1 );
[242] Fix | Delete
[243] Fix | Delete
if ( is_numeric( $index ) ) {
[244] Fix | Delete
$key = (int) $index;
[245] Fix | Delete
}
[246] Fix | Delete
}
[247] Fix | Delete
[248] Fix | Delete
if ( ! isset( $value[ $key ] ) ) {
[249] Fix | Delete
return $default;
[250] Fix | Delete
}
[251] Fix | Delete
[252] Fix | Delete
$value = $value[ $key ];
[253] Fix | Delete
}
[254] Fix | Delete
[255] Fix | Delete
return $value;
[256] Fix | Delete
}
[257] Fix | Delete
[258] Fix | Delete
/**
[259] Fix | Delete
* Wrapper for {@see self::array_get()} that sanitizes the value before returning it.
[260] Fix | Delete
*
[261] Fix | Delete
* @since 4.0.7
[262] Fix | Delete
*
[263] Fix | Delete
* @param array $array An array which contains value located at `$address`.
[264] Fix | Delete
* @param string $address The location of the value within `$array` (dot notation).
[265] Fix | Delete
* @param mixed $default Value to return if not found. Default is an empty string.
[266] Fix | Delete
* @param string $sanitizer Sanitize function to use. Default is 'sanitize_text_field'.
[267] Fix | Delete
*
[268] Fix | Delete
* @return mixed The sanitized value if found, otherwise $default.
[269] Fix | Delete
*/
[270] Fix | Delete
public function array_get_sanitized( $array, $address, $default = '', $sanitizer = 'sanitize_text_field' ) {
[271] Fix | Delete
if ( $value = $this->array_get( $array, $address, $default ) ) {
[272] Fix | Delete
$value = $sanitizer( $value );
[273] Fix | Delete
}
[274] Fix | Delete
[275] Fix | Delete
return $value;
[276] Fix | Delete
}
[277] Fix | Delete
[278] Fix | Delete
/**
[279] Fix | Delete
* Creates a new array containing only the items that have a key or property or only the items that
[280] Fix | Delete
* have a key or property that is equal to a certain value.
[281] Fix | Delete
*
[282] Fix | Delete
* @param array $array The array to pick from.
[283] Fix | Delete
* @param string|array $pick_by The key or property to look for or an array mapping the key or property
[284] Fix | Delete
* to a value to look for.
[285] Fix | Delete
*
[286] Fix | Delete
* @return array
[287] Fix | Delete
*/
[288] Fix | Delete
public function array_pick( $array, $pick_by ) {
[289] Fix | Delete
if ( is_string( $pick_by ) || is_int( $pick_by ) ) {
[290] Fix | Delete
$this->_pick = $pick_by;
[291] Fix | Delete
} else if ( is_array( $pick_by ) && 1 === count( $pick_by ) ) {
[292] Fix | Delete
$this->_pick = key( $pick_by );
[293] Fix | Delete
$this->_pick_value = array_pop( $pick_by );
[294] Fix | Delete
} else {
[295] Fix | Delete
return array();
[296] Fix | Delete
}
[297] Fix | Delete
[298] Fix | Delete
return array_filter( $array, array( $this, '_array_pick_callback' ) );
[299] Fix | Delete
}
[300] Fix | Delete
[301] Fix | Delete
/**
[302] Fix | Delete
* Sets a value in a nested array using an address string (dot notation)
[303] Fix | Delete
*
[304] Fix | Delete
* @see http://stackoverflow.com/a/9628276/419887
[305] Fix | Delete
*
[306] Fix | Delete
* @param array $array The array to modify
[307] Fix | Delete
* @param string|array $path The path in the array
[308] Fix | Delete
* @param mixed $value The value to set
[309] Fix | Delete
*/
[310] Fix | Delete
public function array_set( &$array, $path, $value ) {
[311] Fix | Delete
$path_parts = is_array( $path ) ? $path : explode( '.', $path );
[312] Fix | Delete
$current = &$array;
[313] Fix | Delete
[314] Fix | Delete
foreach ( $path_parts as $key ) {
[315] Fix | Delete
if ( ! is_array( $current ) ) {
[316] Fix | Delete
$current = array();
[317] Fix | Delete
}
[318] Fix | Delete
[319] Fix | Delete
if ( '[' === $key[0] && is_numeric( substr( $key, 1, - 1 ) ) ) {
[320] Fix | Delete
$key = (int) $key;
[321] Fix | Delete
}
[322] Fix | Delete
[323] Fix | Delete
$current = &$current[ $key ];
[324] Fix | Delete
}
[325] Fix | Delete
[326] Fix | Delete
$current = $value;
[327] Fix | Delete
}
[328] Fix | Delete
[329] Fix | Delete
public function array_sort_by( $array, $key_or_prop ) {
[330] Fix | Delete
if ( ! is_string( $key_or_prop ) && ! is_int( $key_or_prop ) ) {
[331] Fix | Delete
return $array;
[332] Fix | Delete
}
[333] Fix | Delete
[334] Fix | Delete
$this->_sort_by = $key_or_prop;
[335] Fix | Delete
[336] Fix | Delete
if ( $this->is_assoc_array( $array ) ) {
[337] Fix | Delete
uasort( $array, array( $this, '_array_sort_by_callback' ) );
[338] Fix | Delete
} else {
[339] Fix | Delete
usort( $array, array( $this, '_array_sort_by_callback' ) );
[340] Fix | Delete
}
[341] Fix | Delete
[342] Fix | Delete
return $array;
[343] Fix | Delete
}
[344] Fix | Delete
[345] Fix | Delete
/**
[346] Fix | Delete
* Update a nested array value found at the provided path using {@see array_merge()}.
[347] Fix | Delete
*
[348] Fix | Delete
* @since 4.0.7
[349] Fix | Delete
*
[350] Fix | Delete
* @param array $array
[351] Fix | Delete
* @param $path
[352] Fix | Delete
* @param $value
[353] Fix | Delete
*/
[354] Fix | Delete
public function array_update( &$array, $path, $value ) {
[355] Fix | Delete
$current_value = $this->array_get( $array, $path, array() );
[356] Fix | Delete
[357] Fix | Delete
$this->array_set( $array, $path, array_merge( $current_value, $value ) );
[358] Fix | Delete
}
[359] Fix | Delete
[360] Fix | Delete
/**
[361] Fix | Delete
* Whether or not a string ends with a substring.
[362] Fix | Delete
*
[363] Fix | Delete
* @since ??
[364] Fix | Delete
*
[365] Fix | Delete
* @param string $haystack The string to look in.
[366] Fix | Delete
* @param string $needle The string to look for.
[367] Fix | Delete
*
[368] Fix | Delete
* @return bool
[369] Fix | Delete
*/
[370] Fix | Delete
public function ends_with( $haystack, $needle ) {
[371] Fix | Delete
$length = strlen( $needle );
[372] Fix | Delete
[373] Fix | Delete
if ( 0 === $length ) {
[374] Fix | Delete
return true;
[375] Fix | Delete
}
[376] Fix | Delete
[377] Fix | Delete
return ( substr( $haystack, -$length ) === $needle );
[378] Fix | Delete
}
[379] Fix | Delete
[380] Fix | Delete
public function ensure_directory_exists( $path ) {
[381] Fix | Delete
if ( file_exists( $path ) ) {
[382] Fix | Delete
return is_dir( $path );
[383] Fix | Delete
}
[384] Fix | Delete
[385] Fix | Delete
// Try to create the directory
[386] Fix | Delete
$path = $this->normalize_path( $path );
[387] Fix | Delete
[388] Fix | Delete
if ( ! $this->WPFS()->mkdir( $path ) ) {
[389] Fix | Delete
// Walk up the tree and create any missing parent directories
[390] Fix | Delete
$this->ensure_directory_exists( dirname( $path ) );
[391] Fix | Delete
$this->WPFS()->mkdir( $path );
[392] Fix | Delete
}
[393] Fix | Delete
[394] Fix | Delete
return is_dir( $path );
[395] Fix | Delete
}
[396] Fix | Delete
[397] Fix | Delete
public static function instance() {
[398] Fix | Delete
if ( ! self::$_instance ) {
[399] Fix | Delete
self::$_instance = new ET_Core_Data_Utils();
[400] Fix | Delete
}
[401] Fix | Delete
[402] Fix | Delete
return self::$_instance;
[403] Fix | Delete
}
[404] Fix | Delete
[405] Fix | Delete
/**
[406] Fix | Delete
* Determine if an array has any `string` keys (thus would be considered an object in JSON)
[407] Fix | Delete
*
[408] Fix | Delete
* @param $array
[409] Fix | Delete
*
[410] Fix | Delete
* @return bool
[411] Fix | Delete
*/
[412] Fix | Delete
public function is_assoc_array( $array ) {
[413] Fix | Delete
return is_array( $array ) && count( array_filter( array_keys( $array ), 'is_string' ) ) > 0;
[414] Fix | Delete
}
[415] Fix | Delete
[416] Fix | Delete
/**
[417] Fix | Delete
* Determine if value is an XML-RPC error.
[418] Fix | Delete
*
[419] Fix | Delete
* @param SimpleXMLElement $value
[420] Fix | Delete
*
[421] Fix | Delete
* @return bool
[422] Fix | Delete
*/
[423] Fix | Delete
public function is_xmlrpc_error( $value ) {
[424] Fix | Delete
return is_object( $value ) && isset( $value->faultCode );
[425] Fix | Delete
}
[426] Fix | Delete
[427] Fix | Delete
/**
[428] Fix | Delete
* Replaces any Windows style directory separators in $path with Linux style separators.
[429] Fix | Delete
* Windows actually supports both styles, even mixed together. However, its better not
[430] Fix | Delete
* to mix them (especially when doing string comparisons on paths).
[431] Fix | Delete
*
[432] Fix | Delete
* @since 4.0.8 Use {@see wp_normalize_path()} if it exists. Remove all occurrences of '..' from paths.
[433] Fix | Delete
* @since 3.0.52
[434] Fix | Delete
*
[435] Fix | Delete
* @param string $path
[436] Fix | Delete
*
[437] Fix | Delete
* @return string
[438] Fix | Delete
*/
[439] Fix | Delete
public function normalize_path( $path = '' ) {
[440] Fix | Delete
$path = (string) $path;
[441] Fix | Delete
$path = str_replace( '..', '', $path );
[442] Fix | Delete
[443] Fix | Delete
if ( function_exists( 'wp_normalize_path' ) ) {
[444] Fix | Delete
return wp_normalize_path( $path );
[445] Fix | Delete
}
[446] Fix | Delete
[447] Fix | Delete
return str_replace( '\\', '/', $path );
[448] Fix | Delete
}
[449] Fix | Delete
[450] Fix | Delete
/**
[451] Fix | Delete
* Generate post data for a XML-RPC method call
[452] Fix | Delete
*
[453] Fix | Delete
* @param string $method_name
[454] Fix | Delete
* @param array $params
[455] Fix | Delete
*
[456] Fix | Delete
* @return string
[457] Fix | Delete
*/
[458] Fix | Delete
public function prepare_xmlrpc_method_call( $method_name, $params = array() ) {
[459] Fix | Delete
$output = '';
[460] Fix | Delete
[461] Fix | Delete
foreach ( $params as $param ) {
[462] Fix | Delete
$value = $this->_create_xmlrpc_value( $param );
[463] Fix | Delete
$output .= "<param>{$value}</param>";
[464] Fix | Delete
}
[465] Fix | Delete
[466] Fix | Delete
$method_name = esc_html( $method_name );
[467] Fix | Delete
[468] Fix | Delete
return
[469] Fix | Delete
"<?xml version='1.0' encoding='UTF-8'?>
[470] Fix | Delete
<methodCall>
[471] Fix | Delete
<methodName>{$method_name}</methodName>
[472] Fix | Delete
<params>
[473] Fix | Delete
{$output}
[474] Fix | Delete
</params>
[475] Fix | Delete
</methodCall>";
[476] Fix | Delete
}
[477] Fix | Delete
[478] Fix | Delete
/**
[479] Fix | Delete
* Disable XML entity loader.
[480] Fix | Delete
*
[481] Fix | Delete
* @param bool $disable
[482] Fix | Delete
*
[483] Fix | Delete
* @return void
[484] Fix | Delete
*/
[485] Fix | Delete
public function libxml_disable_entity_loader( $disable ) {
[486] Fix | Delete
if ( function_exists( 'libxml_disable_entity_loader' ) ) {
[487] Fix | Delete
libxml_disable_entity_loader( $disable );
[488] Fix | Delete
}
[489] Fix | Delete
}
[490] Fix | Delete
[491] Fix | Delete
/**
[492] Fix | Delete
* Securely use simplexml_load_string.
[493] Fix | Delete
*
[494] Fix | Delete
* @param string $data XML data string.
[495] Fix | Delete
*
[496] Fix | Delete
* @return SimpleXMLElement
[497] Fix | Delete
*/
[498] Fix | Delete
public function simplexml_load_string( $data ) {
[499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function