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.