Launched this week

Lucid Search & Replace
Search and replace that survives serialized data
3 followers
Search and replace that survives serialized data
3 followers
Change a domain and most search and replace tools quietly miss the URLs inside page builders. Elementor stores layouts as JSON inside PHP serialized values, with slashes escaped. Search for https://oldsite.com and you match nothing. Search the escaped form and replace as text and you corrupt the row, because serialization stores byte lengths that stop matching. Lucid unserializes, walks the tree, decodes the JSON leaves, and keeps the original escaping. Preview first, snapshot, undo.








maker here. the bug that made me write this is more interesting than the plugin.
page builders like Elementor store a whole page layout as JSON, and that JSON sits inside a PHP serialized value. PHP escapes forward slashes when it encodes JSON, so the two strings below are the same URL. the first is what is actually in your database. the second is what you would type into a search box.
search for the second and you match nothing. the replace reports success, changes hundreds of other rows, and every page still points at the old domain. you find out when someone opens one.
searching for the escaped form is worse. PHP serialization writes a byte length before each string, so a 19 character domain is stored behind s:19. swap it for a 22 character one as plain text and the prefix still says 19, unserialize() hits the wrong boundary and returns false, and the row is gone. that is the "search and replace corrupted my database" story.
the part that took longest: you have to preserve the original slash escaping when you re-encode. two JSON encodings of the same data are both valid and different lengths, so you can decode, replace correctly, re-encode correctly, and still hand back a value that no longer matches its own length prefix.
it previews representative matches before writing anything, can snapshot first, and can undo. GPL, no paid tier, nothing held back.
disclosure: I also sell a separate WordPress backup plugin. this is not a lite version of it and there is no upgrade path being sold here.
happy to be told I have missed a case. I only verified Elementor properly and would like to know how other builders store things.