Dave Dash

Parsing a list of Key:Value pairs

Tagged: reviewsby.us, programming, symfony, openid, php, best-practices

[tags]best practices,php,openID[/tags] I'm working on implementing openID for reviewsby.us and for use in symfony apps. One thing I was having trouble with was parsing key value pairs, which is one of the requirements to reading responses. It's a fairly easy task, but PHP offers so many ways to do this.

openID calls for the following Key-Value format:

Lines of:

  • some_key:some value
  • There MUST NOT be a space before or after the colon.
  • Newline characters MUST be Unix-style, just ASCII character 10 ("\n").
  • Newlines MUST BE at end of each line as well as between lines.
  • MIME type is unspecified, but text/plain is RECOMMENDED.
  • Character encoding MUST BE UTF-8.

So here is my attempt at parsing something like this as efficiently and error free as possible:

I wrote this function as I was writing the post... and it came out way faster than my previous implementations using strtok or a combination of explode and trim. Which is good to hear since I do use preg_ functions quite a bit in PHP and they definitely have their place.

I'm curious if people have found a faster way of parsing through a string of Key-Value pairs. I'll run it in a test harness and stand corrected if someone comes through with something faster ;).