问题标签 [punycode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1698 浏览

sockets - 我如何知道何时进行 UTF8 或 punycode DNS 查询?

我有一个带有地址栏的应用程序,用户输入我必须连接的 IRI。

在 unix/Darwin 上,这很简单:我将 IDN 扁平化为 URI,如 RFC3987 中所述。也就是说,如果该方案有一个授权部分,我将它映射到带有 punycode 的 ASCII,然后在 IRI 的其余部分中对任何非 ASCII 字符进行百分比编码。

在 Windows 上,有两种可能性:要么域名是普通的互联网域名,在这种情况下,它应该使用 punycode 映射到 ASCII 并使用普通 DNS 查找。或者,域名是一个奇怪的 Windows 域名(例如 Active Directory DNS 服务器),查找实际上应该是 UTF-8。

例子

  • 用户类型http://☃.net:通话getaddrinfo(service="xn--n3h.net")
  • 用户类型http://dryden.internal.corp.com:调用getaddrinfo(service="dryden.internal.corp.com")将正常工作。
  • 用户类型http://pöp.internal.corp.com
    • 如果“pöp”是 UTF-8 DNS 发布的机器名称,则调用getaddrinfo(service="xn--pp-fka.internal.corp.com")不起作用。
    • 调用GetAddrInfoW(service=T"pöp.internal.corp.com")工作。

Firefox 和 Chrome 都在任何 IRI 上立即执行 punycode,因此无法解析奇怪的 Microsoft 域。

指导方针?

在这样的环境中处理 IRI 有哪些指导方针?是否有任何推荐的方法来猜测应该进行哪种 DNS 查找,punycode 或 UTF-8 DNS?其他应用程序是做什么的?

我目前对解决方案的最佳尝试是,如果它是公共 TLD,则首先执行 punycode,但如果 TLD 是内部的,则跳过尝试 punycode(acme.com 可能服务于公共事物,acme.ltd 可能是一个 Intranet)。如果 punycode 失败或被跳过,我会尝试 UTF-8 查询。

0 投票
1 回答
158 浏览

c# - 从 .NET 中的 IDN 的 Web 自动解码 Punycode 调用提要解析

我有 RSS 提要 http://xn--d1abbgf6aiiy.xn--p1ai/feeds 当我通过 Web ASP.Net MVC 应用程序添加此提要并调用解析提要的方法时,提要属性会自动从 ASCII 转换为 Unicode 表示特性。当我从 Windows 窗体调用相同的代码时,它仍然是属性中表示的 ASCII。

我确实希望保留从 FEED 解析的 ASCII 表示的 URL。我不知道这怎么会发生?

0 投票
1 回答
209 浏览

html - IDN 在 src 属性中是有效的还是必须是 Punycode 编码的?

在 UTF-8 编码的 HTML 文档中,使用IDN作为值srchref属性是否有效?

是否存在强制使用 Punycode 编码版本的反对意见?

我不确定现代用户代理是否将 ahref视为“<a href="http://www.ietf.org/rfc/rfc3490.txt" rel="nofollow">IDN-unaware domain name slot”。

0 投票
1 回答
223 浏览

azure - Azure 站点上的自定义 IDN(国际化域名)上的 404

将 punyencoded IDN 名称添加到自定义域列表中效果很好,但我的服务器不响应请求,而是收到默认 Azure 错误“404 - 未找到网站!” 页面(表明请求至少发送到 Azure)。

有谁知道是否有办法让它工作?

0 投票
0 回答
271 浏览

facebook - Facebook OpenGraph 元数据 - Punycoded 域(带有扫描/特殊字符)未解码

Facebook 似乎不理解使用 OpenGraph og:url 元标记解码 punycoded 域

看看这个例子 - 输入“kämp pikset .fi”(请删除空格,我不希望这个问题被该关键字索引):

https://developers.facebook.com/tools/debug/

我认为这是 Facebook 的 OpenGraph 解析的一个缺点......有没有办法解决这个问题?

更新:我已经向 Facebook 提交了问题报告。

0 投票
1 回答
1070 浏览

php - punycode 和 .рф 西里尔文域重定向

我有一个带有西里尔域名的网站。有一个授权库将用户重定向到登录页面,但 url 不知何故格式错误。

该网站在 CodeIgniter 上,使用的重定向功能是 codeigniter 的标准重定向功能。我做了一些修改,现在看起来像这样

idn_to_ascii 函数似乎没有正确编码 UTF url 字符串......

任何人都可以暗示解决方案吗?

代替

我明白了

有任何想法吗 ?

0 投票
2 回答
1600 浏览

php - PHP:idn_to_utf8() 的问题。某些域未转换

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

但有时这个函数会返回 punycode 而不是 unicode 字符串。

例子 :

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

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

编辑/解决方案和说明:总结和解释问题:此代码显示问题:

此代码显示以下内容:

xn--2-958a11kws1a96p50fgxenr6afga

吉津第2自転车置场(应为):吉津第2自転车置场</p>

更清楚一点:当我们得到吉津第2自転车置场的punycode时,在转换这个字符串之前,PHP将其转换为吉津第2自転车置场(字符“2”不同)。因此,使用idn_to_ascii函数我们无法转换所有 unicode 字符,因为 PHP 将某些 unicode 字符转换为其他字符(在本例中 PHP 将 2 转换为 2(对不起,这个“二到”的发音)。

0 投票
2 回答
429 浏览

unicode - 如何使用包含扩展字符的主机名形成 URI 以访问网络机器

我在本地网络上有一些 Windows 7 机器,每台机器都有一个主机名。其中一个是运行 Java 8 应用程序,该应用程序必须通过 HTTP 访问另一台机器,因此它需要形成一个包含服务器机器主机名的 URI。运行 HTTP 服务器的机器有一个包含日文字符的主机名,这些字符在 URI 中是不允许的。

如何构造 URI 以访问本地网络上的服务器?RFC 4501,“域名系统统一资源标识符”,表示根据 RFC 3986,“统一资源标识符 (URI):通用语法”进行编码,我将其推断为 UTF-8 八位字节的百分比编码。但是 RFC 3490,“应用程序中的国际化域名 (IDNA)”,表示要转换为 Punycode。

那么它是百分比编码还是 Punycode 呢?哪种编码允许 Java 应用程序成功查找并连接到本地网络上的另一台 Windows 7 机器,主机名中包含扩展字符?

0 投票
0 回答
828 浏览

php - php filter_var unicode 域

我正在编写验证表单,并使用带有 FILTER_VALIDATE_EMAIL 的标准 php 函数“filter_var”,但似乎上述函数不适用于 .рф 等 unicode 域,在阅读了一些文章后尝试使用 punycode 和过滤器进行编码但没有成功。我只是好奇是否有任何通用的方法来验证电子邮件而不是提前使用正则表达式 Thanx

0 投票
1 回答
441 浏览

python - 如何处理 Django 的 csrf 中间件中的 utf-8 与 punycode 问题?

我有一个非 ascii 字符的域,类似于http://blå.no该域使用其 punycode 等效项注册:

这也在 Apache vhost 中设置:

我看到的问题来自包含以下内容的请求:

IE。引用者以 utf-8 格式发送,而不是 punycode。我得到的例外是:

中的相关代码csrf.py为:

get_host()使用SERVER_NAME来自请求的)

是否有本机 Django 方法来处理这个问题,或者我是否需要编写一个中间件,将 utf-8 转换为引用标头的域部分中的 punycode?