现在我正在使用idn_to_ascii函数将一些IDN域名转换为ascii域名。
此代码效果很好,直到客户在其域名中使用ß:
idn_to_ascii( "teßt" );
这导致错误的结果转换为“tesst” - 进行了一些研究,我发现IDN 2008中有一个更新,包括ß作为特殊的可转换字符。所以新的电话是
idn_to_ascii("teßt", IDNA_NONTRANSITIONAL_TO_ASCII, INTL_IDNA_VARIANT_UTS46);
在我们的开发环境中工作正常(XAMPP,Windows,PHP 5.4.16)
在我将它部署到我们的生产系统之后,上面代码的结果是“NULL”,尽管它是完全相同的PHP 5.4.16版本,只是它是一个CentOS6系统。
更有趣:
Production System:
var_dump(IDNA_NONTRANSITIONAL_TO_ASCII); => string(29) "IDNA_NONTRANSITIONAL_TO_ASCII"
var_dump(INTL_IDNA_VARIANT_UTS46); => string(23) "INTL_IDNA_VARIANT_UTS46"
Dev System:
var_dump(IDNA_NONTRANSITIONAL_TO_ASCII); => int(16)
var_dump(INTL_IDNA_VARIANT_UTS46); => int(1)
这清楚地告诉我,它不包括新标准的定义,但它应该,因为libidn2和php-intl安装在生产系统上。
我希望你有任何线索,因为我不知道在哪里看别的。 提前谢谢!