Looks good so far. You may have noticed the effort of Stefan Neufeind and myself, of implementing IDNA for PEAR.
Stefan however made a first version some months ago, after joining the discussion about my plans to contribute IDNA for PEAR.
Have a look on it at: http://pear.speedpartner.de/
I was a bit dissatisfied with his version, but unfortunately I did'nt find much time on completing my work on a final API for IDNA in PEAR.
As my time seems quite to be very limited now, and for the next months, I would love to see you working on IDNA for PEAR together with Stefan.
There is a need for a PHP4 version anyways.
It would be bad to have two different APIs for IDNA in PHP4 and PHP5.
So here's a short summary of what I had to criticize/advise on both Stefan's and your work.
1) The package name
IDNA may be Net related, but doesn't it be more related to Internatiolization at all? I18N_IDN may be a good choice here.
(I explicitly use IDN here, IDNA means "Internationalized Domain Names in Applications", but as every script or product using IDNs is more or less an application, "IDN" would do it here. It's just about "Internationalized Domain Names"... that implies beeing used in "applications" for our purpose)
I think "IDN" makes the context clear, so we don't need the "A" anymore. ;)
Punycode is a single standard. Even if it's only related to IDNA it should (IMHO) go into a single class.
3) Input encodings
I'd like to see support for many more input encodings than just the unicode-compatible ones.
Especially "Multibyte string" (mbstring) ind "libiconv" (iconv) extension are interesting here. Also "recode" may need a quick look on.
I don't want to stuck with the development of an IDNA implementation for PEAR anymore. I really like to have this in PEAR (to use it in a specific application of mine) and I see my limit on time is currently not really helpfully on the IDNA efforts in PEAR.
I hope it's feasiblly someway that you'd short circuit with Stefan to bring IDNA in PEAR to a final version for both PHP4 and PHP5 really soon.