是否允许自定义URI方案使用哈希/井号(#)作为其内容?

时间:2015-09-29 15:04:28

标签: android url uri

在Kullo,我们使用protected function configureFormFields(FormMapper $formMapper) { $formMapper ->add( 'SvgLogo', 'sonata_type_model_list', array('required' => false), array( 'link_parameters' => array('context' => 'svg_file', 'provider' => 'sonata.media.provider.svg'), ) ) } 格式的地址(例如username#domain.tld),其中hi#kullo.net是常量,类似于电子邮件地址中的#

现在,什么是用于将消息发送到给定地址的正确URI格式:

@kullo:username#domain.tld

第一个是首选,因为它很简单。但是考虑到URI的规则,我是否可以为我的自定义方案kullo:username%23domain.tld制作#除了片段分隔符之外的东西?

1 个答案:

答案 0 :(得分:1)

RFC 3986,哈希符号是保留的,但这并不意味着自定义URI方案必须将其用作分隔符:

  

2.2。保留字符

     

URI包括由分隔的组件和子组件   "保留"中的字符组。这些字符被调用   "保留"因为他们可能(或可能不会)被定义为分隔符   通用语法,每种特定于方案的语法,或者由   URI的解除引用算法的特定于实现的语法。   如果URI组件的数据与保留的数据冲突   字符作为分隔符的目的,那么冲突的数据必须是   在URI形成之前进行百分比编码。

     

[...]

     

因此,保护​​集中的字符受到保护   归一化,因此可以安全地用于特定方案   用于分隔数据子组件的特定于生产者的算法   在URI中。

     

[...]

     

生成URI的应用程序应对数据八位字节进行百分比编码   除非这些字符对应于保留集中的字符   URI方案特别允许表示其中的数据   零件。如果在URI组件中找到保留字符   对于该角色没有分隔角色,那么它必须是   解释为表示与其对应的数据八位字节   字符在US-ASCII中的编码。

所以你可以决定不逃避它,但你将失去规范化功能:

kullo:username#domain.tld != kullo:username%23domain.tld

kullo:username#domain.tld == kullo:%75sername#domain.tld