[[*id:is=`1`:then=` <div id="settings-wrapper" style="min-height: 50px;"> [[!_utility? &type=`settings` &data=`a?`]] </div> `]]
[[*id:is=`1`:then=` <div id="settings-wrapper" style="min-height: 50px;"> [[!_utility? &type=`settings` &data=`?`]] </div> `]]
[[*id:is=`1`:then=` <div id="settings-wrapper" style="min-height: 50px;"> [[!_utility? &type=`settings` &data=`?a`]] </div> `]]
This question has been answered by multiple community members. See the first response.
A character followed by a question mark is tells the parser that arguments follow. If there is more than one such combo in a tag, the parser will get confused.
If _utility is your own snippet, you can use some other character or character combination where you want the question mark (e.g., QQ) and translate it in the snippet.
<div id="settings-wrapper" style="min-height: 50px;"> [[!_utility? &type=`settings` &data=`How was your day?`]] </div>
[[*id:is=`1`:then=` <div id="settings-wrapper" style="min-height: 50px;"> [[!_utility? &type=`settings` &data=`How was your day?`]] </div> `]]
[[!*id:is=`1`:then=` <div id="settings-wrapper" style="min-height: 50px;"> [[!_utility? &type=`settings` &data=`?`]] </div> `]]
Just for kicks, have you tried this?
[[!*id:is=`1`:then=` <div id="settings-wrapper" style="min-height: 50px;"> [[!_utility? &type=`settings` &data=`?`]] </div> `]]
If my understanding of the parser is any good, the problem you're seeing is due to the parsing order. _utility is uncached, causing it to be processed later, and the [[*id]] processing taking place first, which is where the parser gets confused with the extra backticks and the question mark..