I am writing a PHP service to query an Exchange server via WebDAV. This service has been live for roughly a month with no issues, but experienced a hiccup today when an email with the following subject line arrived in the mailbox:
FW: Daily Approval Report: Vendor/Master 007297
The message is stored in the file "FW: Daily Approval Report: Vendor/Master 007297.EML" and is referenced through a url as:
FW:%20Daily%20Approval%20Report:%20Vendor_xF8FF_Master%20007297.EML
I had been using the PHP rawurlencode()
function to translate the message filename to its URL counterpart, but in this case rawurlencode()
returns a mismatched string:
FW%3A%20Daily%20Approval%20Report%3A%20Vendor%2FMaster%20007297.EML
I'm no guru with Exchange and do not know how to match it's encoding. Can someone tell me if there is a mapping I can use to write my own function? I assume simply replacing /
with \_xF8FF\_
and skipping colons will lead to chasing down this error again a month from now, but Google hasn't been helpful producing a full list of exceptions.
I've googled around a bit, but I haven't been able to find the complete reference of characters that you're looking for.
The only thing that I've discovered is that the following five characters have a special encoding in Exchange:
Maybe it could help to have a look at the source of the Ximian Connector for Microsoft Exchange, and more precisely at the "e2k_uri_append_encoded" function, at line 280.
The Ximian Connector enables Ximian Evolution to function as a Microsoft Exchange client by communicating with Microsoft Exchange servers through the WebDAV protocol, so it has to deal exactly with the same problem you have encountered.
Which Exchange Server do you use? Keep in mind that WebDAV is not supported anymore. ES2007 supports WebDAV and Exchange Web Services. ES2010 supportes only Exchange Web Services. However, encoding is fixed ;-)