Naming, oh god yes, the naming. Nothing is consistent with naming functions at all. My favorite example of this is the aptly named "parse_str" function:
Ah that one is my favorite. The second parameter is optional, but if you don't pass it in it's a noop. Don't really get where that came from.
Ohohoho. No... if you omit the second parameter, PHP sets variables from the query string in your local scope. Surprise! It's register_globals all over again.
Wow. That's so fantastic I can't even describe it. I can't imagine how much buggy software there is out there because of this.