Something similar came up recently, with someone wanting to convert a big block of HTML - but only the bits between tags, not inside the tags themselves. A search should turn it up
In this case it's even easier, however so I'm going to make it sound tedious. One possible complication: can " appear inside a double-quoted value? If so, how is it prevented from choking things up?
First off, trim() the string so's I don't have to worry about leading or trailing whitespace. Then use substr($bigstring,1,-1) to knock off the {} characters (I'm presuming that there's only one of these things in the entire string.)
If it can't appear the problem is pretty simple. $bits = explode('"', $bigstring);
All the odd-numbered elements are tag names and sundry punctuation (, and occasional whitespace) and all the even-numbered elements are the values.
If " can appear, and it's escaped with (say) [/b], then $bits = preg_split('/(?<!\)/"', $bigstring); instead. (Note that \ is escaped because PHP uses it as an escape character, too. If the string uses something else, then it will have to be converted before turning it into a PHP-array-like thing.);
Strip the sundry punctuation from the odd-numbered bits and you'll have an array going tag,value,tag,value,...
I think there may be an empty "tag" right on the end - easy enough to check - there is if the array has an odd number of elements. array_pop and throw it away if it's there.
Now put " characters around all the elements (yes, you'll want to do this if it's to be a PHP-style array).
Put => on the end of all the odd-numbered elements, and , on the even-numbered ones.
Now $bigstring = join('', $bits);
If yo're worried about the stray comma on the very end of the resulting string, substr() it off, but PHP won't mind if it's there.
And to wrap up, $bigstring = '('.$bigstring.')';