Anonymous
Замена текста в строке, содержащей массивы сериализации
Сообщение
Anonymous » 29 сен 2024, 17:26
Спасибо, что нажали на вопрос. Я пытаюсь найти и заменить текст в строке, содержащей массивы сериализации. Например:
Код: Выделить всё
'fgm2wc_options', 'a:19:{s:15:"automatic_empty";N;s:3:"url";s:25:"http://example.com/store/";s:8:"hostname";s:9:"localhost";s:4:"port";s:4:"3306";s:8:"database";s:22:"apgadmin_store_magento";s:8:"username" ... }
Я хочу изменить
http://example.com/ на smth, иначе я могу сделать это с помощью str_replace, но это не изменит индикатор длины строки (например, s:25 ).
Я использую эту функцию:
Код: Выделить всё
function recursive_unserialize_replace( $old_url = '', $new_url = '', $data = '', $serialised = false ) {
$new_url = rtrim( $new_url, '/' );
$data = explode( ', ', $data );
try {
if ( is_string( $data ) && ( $unserialized = @unserialize( $data ) ) !== false ) {
$data = recursive_unserialize_replace( $old_url, $new_url, $unserialized, true );
} elseif ( is_array( $data ) ) {
$_tmp = array( );
foreach ( $data as $key => $value ) {
$_tmp[ $key ] = recursive_unserialize_replace( $old_url, $new_url, $value );
}
$data = $_tmp;
unset( $_tmp );
} else {
if ( is_string( $data ) ) {
$data = str_replace( $old_url, $new_url, $data );
}
}
if ( $serialised ) {
return serialize( $data );
}
} catch( Exception $error ) {
}
return $data;
}
Есть идеи?
Подробнее здесь:
https://stackoverflow.com/questions/472 ... ize-arrays
1727620004
Anonymous
Спасибо, что нажали на вопрос. Я пытаюсь найти и заменить текст в строке, содержащей массивы сериализации. Например: [code]'fgm2wc_options', 'a:19:{s:15:"automatic_empty";N;s:3:"url";s:25:"http://example.com/store/";s:8:"hostname";s:9:"localhost";s:4:"port";s:4:"3306";s:8:"database";s:22:"apgadmin_store_magento";s:8:"username" ... } [/code] Я хочу изменить http://example.com/ на smth, иначе я могу сделать это с помощью str_replace, но это не изменит индикатор длины строки (например, s:25 ). Я использую эту функцию: [code]function recursive_unserialize_replace( $old_url = '', $new_url = '', $data = '', $serialised = false ) { $new_url = rtrim( $new_url, '/' ); $data = explode( ', ', $data ); try { if ( is_string( $data ) && ( $unserialized = @unserialize( $data ) ) !== false ) { $data = recursive_unserialize_replace( $old_url, $new_url, $unserialized, true ); } elseif ( is_array( $data ) ) { $_tmp = array( ); foreach ( $data as $key => $value ) { $_tmp[ $key ] = recursive_unserialize_replace( $old_url, $new_url, $value ); } $data = $_tmp; unset( $_tmp ); } else { if ( is_string( $data ) ) { $data = str_replace( $old_url, $new_url, $data ); } } if ( $serialised ) { return serialize( $data ); } } catch( Exception $error ) { } return $data; } [/code] Есть идеи? Подробнее здесь: [url]https://stackoverflow.com/questions/47266930/replacing-text-within-string-that-contains-serialize-arrays[/url]