Fabio,
You use the following code to replace the single quote with its equivalent code.
For the single quote, you are sending the equivalent of "''", double-quote single-quote single-quote double-quote .
<core:set value="${userRead.replaceAll ('\x27', "''")}" var="userRead"/> <!-- ' Characters -->
Or you can use this code to replace all XOG unfriendly characters with their equivalent codes.
<!-- Clean up Data in userRead -->
<core:set value="${userRead}" var="TMP_String"/>
<core:set value="${TMP_String.replaceAll ('[^\p{ASCII}]', '?')}" var="TMP_String"/> <!-- Extended Characters -->
<core:set value="${TMP_String.replaceAll ('\x26', '&')}" var="TMP_String"/> <!-- & Characters -->
<core:set value="${TMP_String.replaceAll ('\x22', '"')}" var="TMP_String"/> <!-- " Characters -->
<core:set value="${TMP_String.replaceAll ('\x3e', '>')}" var="TMP_String"/> <!-- greater than Characters -->
<core:set value="${TMP_String.replaceAll ('\x3c', '<')}" var="TMP_String"/> <!-- less than Characters -->
<core:set value="${TMP_String.replaceAll ('\x2f', '/')}" var="TMP_String"/> <!-- / Characters -->
<core:set value="${TMP_String.replaceAll ('\x27', "''")}" var="TMP_String"/> <!-- ' Characters -->
<core:set value="${TMP_String}" var="userRead"/>