首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP :关于idn_to_utf8()的问题。某些域未被转换

PHP :关于idn_to_utf8()的问题。某些域未被转换
EN

Stack Overflow用户
提问于 2014-10-24 09:05:48
回答 2查看 1.7K关注 0票数 1

在一个PHP项目中,我使用idn_to_utf8函数将domaine名称从punycode转换为unicode字符串。

但是,有时这个函数返回的是子代码,而不是unicode字符串。

例子:

代码语言:javascript
复制
echo idn_to_utf8('xn--fiq57vn0d561bf5ukfonh1o');
// Return : xn--fiq57vn0d561bf5ukfonh1o
// It should return : 中島第2駐輪場
echo idn_to_utf8('xn--fiqu6mnndw87c3ucbt0a1ea684a');
// Return : 中味鋺自転車置場

有些库可以正确地转换http://idnaconv.phlymail.de/index.php?encoded=xn--fiq57vn0d561bf5ukfonh1o&decode=%3C%3C+Decode&lang=de,但我更喜欢使用PHP函数而不是库。

你对这个问题的起因有什么想法吗?

编辑/解决方案和解释:总结和解释问题:这段代码显示了问题:

代码语言:javascript
复制
echo idn_to_ascii('吉津第2自転車置場');
?><br /><?php
echo idn_to_utf8(idn_to_ascii('吉津第2自転車置場'));
?> Should be : 吉津第2自転車置場 <br /><?php

此代码显示以下内容:

xn 吉津第2自転車置場(应该是):吉津第2自転車置場

需要更清楚的:当我们得到吉津第2自転車置場的小代码时,在转换这个字符串之前将它转换为吉津第2自転車置場(字符"2“是不同的)。因此,使用idn_to_ascii函数,我们无法转换所有unicode字符,因为PHP将某些unicode字符转换为其他字符(在本例中,PHP将2转换为2(对不起,听起来“2到”2)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-24 09:17:56

这个很好用。我认为字符[A-Z0-9]不能使用。

代码语言:javascript
复制
echo idn_to_utf8('xn--2-kq6aw43af1e4y9boczagup'); // 中島第2駐輪場

事实上,在访问之前,我们的色度将自动将中島第2駐輪場.com转换为中島第2駐輪場.com

更新:

似乎提供了一个名为NAMEPREP的规范化规则:https://www.nic.ad.jp/ja/dom/idn.html

更新:

好像被入侵了..。

票数 1
EN

Stack Overflow用户

发布于 2016-01-13 12:37:01

如果没有PECL/intl或PECL/idn,我很难让内置的idn_to_utf8()工作!

这一备选方案: IdnaConv.net,对我来说很好。将域名作为一个整体:

代码语言:javascript
复制
include(__DIR__.'/IdnaConvert.php');$IDNA=new \Mso\IdnaConvert\IdnaConvert();
$domain='xn--b1amarcd.xn--ehq889crwebw5c4qa.net';//'новини.三明治餐馆.net';
$parts=explode('.',$domain);$utf8parts=[];
foreach($parts AS $part){
    if(\substr($part,0,4)==='xn--'){
        $utf8parts[]=$IDNA->decode($part);
    }else{
        $utf8parts[]=$part;
}   }
$utf8domain=implode('.',$utf8parts);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26544816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档