1

现在我正在使用 idn_to_ascii 函数将一些 IDN 域名转换为 ascii 域名。

这段代码运行良好,直到客户在他的域名中使用了 ß:

idn_to_ascii( "teßt" );

这导致 beeeing 转换为“tests”的错误结果 - 进行了一些研究,我发现 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 已安装在生产系统上。

我希望你对我有任何线索,因为我不知道去哪里找。提前致谢!

4

0 回答 0