I'm confused as to at what point CGI comes into this. Earlier, you showed a perl assignment statement representing the (correct!) xml data received by you that you said you were having trouble parsing. Now it sounds like the xml data is being sent as a CGI query to your script by the client (and so is already broken when you initially receive it)? In either case, whoever is forming the CGI request needs to be correctly url-encoding the ; (and semicolons are not necessarily your only problem character.)