`

ruby类库URI解析url时的错误 split': bad URI(is not URI?)

    博客分类:
  • ruby
阅读更多
有这么一个地址,我要得到他的host
url = "http://v.t.sina.com.cn/share/share.php?source=viviband&title=%E7%9C%8B%E5%88%B0%E4%B8%80%E5%BC%BA%E5%8A%9B%E7%9A%84%E5%9B%BE%2C%E6%B1%82%E6%AD%A4%E5%AE%8F%E5%A6%82%E4%BD%95%E5%81%9A%20-%20%E8%89%BE%E6%B3%BD%E6%8B%89%E6%96%AF%E5%9B%BD%E5%AE%B6%E5%9C%B0%E7%"


解析
URI.parse(url)

错误
URI::InvalidURIError: bad URI(is not URI?): http://v.t.sina.com.cn/share/share.php?source=viviband&title=%E7%9C%8B%E5%88%B0%E4%B8%80%E5%BC%BA%E5%8A%9B%E7%9A%84%E5%9B%BE%2C%E6%B1%82%E6%AD%A4%E5%AE%8F%E5%A6%82%E4%BD%95%E5%81%9A%20-%20%E8%89%BE%E6%B3%BD%E6%8B%89%E6%96%AF%E5%9B%BD%E5%AE%B6%E5%9C%B0%E7%


解决方案
URI.parse(url.split("?")[0]).host

其实自己写正则也行,但是既然用了这个模块,就用的彻底一点,下面这个:
URI.parse(URI.encode(url)).host


原因:百分号没有转码
URI.encode(url)的结果
>> URI.encode(url)
=> "http://v.t.sina.com.cn/share/share.php?source=viviband&title=%25E7%259C%258B%25E5%2588%25B0%25E4%25B8%2580%25E5%25BC%25BA%25E5%258A%259B%25E7%259A%2584%25E5%259B%25BE%252C%25E6%25B1%2582%25E6%25AD%25A4%25E5%25AE%258F%25E5%25A6%2582%25E4%25BD%2595%25E5%2581%259A%2520-%2520%25E8%2589%25BE%25E6%25B3%25BD%25E6%258B%2589%25E6%2596%25AF%25E5%259B%25BD%25E5%25AE%25B6%25E5%259C%25B0%25E7%25"






分享到:
评论

相关推荐

    Boost.URL是一个用于操作统一资源标识符(URI)和定位器(URL)的库。.zip

    7. **性能优化**: 由于直接操作内存结构而非字符串,Boost.URL库在处理大量URL时能提供良好的性能。 8. **错误处理**: 提供清晰的错误信息,帮助开发者快速定位和修复问题。 9. **代码示例和文档**: Boost.URL库...

    URI,URL常识

    ### URI与URL的基础概念 #### 一、URI(Uniform Resource Identifier):统一资源标识符 在互联网技术领域中,URI是用于唯一标识一个资源的一种标准形式。它是一种抽象的概念,用以指代任何类型的资源,无论是实体...

    无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl

    标题中的问题“无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl”指出,这可能是Java Web应用开发中遇到的一个常见错误,涉及到JSP(JavaServer Pages)和JSTL(Java...

    Ruby-Addressable替换URI实现Ruby标准库的一部分

    6. **编码和解码**:支持各种编码方式,包括percent-encoded(百分号编码)和 Punycode,这在处理URL中的非ASCII字符时非常关键。 通过`addressable-master`这个压缩包文件,你可以获取到`Addressable`库的源代码,...

    magnet-uri:解析磁铁URI并返回键值的对象

    const uri = 'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&dn=Leaves+of+Grass+by+Walt+Whitman.epub&tr=udp://tracker.example4....

    URI和URL区别 .

    ### URI:统一资源标识符 URI是一种用于唯一标识互联网上资源的标准格式。它不仅限于网页,还可以用来标识文档、图像、视频等任何类型的数字资源。URI的主要作用是为网络上的每一项资源提供一个唯一的名称或地址,...

    博客《Uri详解之——Uri结构与代码提取》对应源码

    例如,使用`Uri.withAppendedPath()`添加路径,使用`Uri.encode()`和`Uri.decode()`进行URL编码解码。 7. **文件Uri与安全问题**: 文件Uri通常以`file:`开头,直接访问可能导致安全问题,例如文件权限泄露。因此...

    Android解析音乐URI的后台服务

    在后台服务的项目中,定义一个AIDL文件,声明一个方法接收音乐URI: ```aidl interface IMusicService { void playMusic(String musicUri); } ``` 4. **实现服务并处理AIDL调用**: 后台服务实现...

    Uri一个URI处理库

    - **数据交换**:当应用程序需要解析或生成来自不同来源的URI时,Uri库可以保证标准化和一致性。 5. **集成与扩展**: Uri库遵循PSR-0和PSR-4规范,可以轻松与其他遵循这些规范的项目集成。此外,它还提供了一些...

    微擎公众号模块提示redirect-uri协议与后台配置不一致错误码10039 的解决办法

    微擎公众号模块提示redirect_uri协议与后台配置不一致错误码10039 的解决办法

    Package with uri not found.doc

    在Eclipse插件开发中,遇到“Package with uri not found”的错误通常是由于EMF(Eclipse Modeling Framework)在加载模型时找不到对应的ECORE文件。这个问题可以从多个角度来分析和解决。 首先,我们要理解EMF的...

    androdi ContentProvider和Uri详解

    例如,如果我们有一个处理学生信息的ContentProvider,我们可以声明如下的Uri:“content://com.example.myapp.provider/students”,其中"com.example.myapp.provider"是authority,"students"是path。 使用...

    URI:Escape模块,awstats搜索的关键字的乱码问题解决

    不过打开这个plugin 需要perl模块儿Encode和URI::Escape的支持,一般情况下perl是默认支持的。 配置awstats后 ,运行一切正常。如果打开AWStats会显示: Error: Plugin load for plugin 'decodeutfkeys' failed ...

    WSDL URI 代码解析

    **WSDL URI 代码解析** 在IT行业中,Web服务接口定义语言(Web Service Description Language,简称WSDL)是一种XML格式,用于定义网络服务的接口。它描述了服务的位置、服务提供的操作以及如何调用这些操作。WSDL ...

    Android Uri

    * 某个图片的 Uri:content://media/external/images/media/4 在 Android 开发中,我们经常需要解析 Uri,并从 Uri 中获取数据。Android 系统提供了两个用于操作 Uri 的工具类,分别为 UriMatcher 和 ContentUris ...

    amazon-s3-uri:可以解析出有关 S3 URI 的信息的 URI 包装器

    亚马逊S3URI 可以解析出有关 S3 URI 的信息的 URI 包装器 无耻地改编自 除了明显的例外: 它不解析version 给定的url字符串没有预处理(如果需要,您必须自己编码和... warn ( ` ${ uri } is not a valid S3 uri` )

    Android 常用的Intent的URI及示例

    Android Intent 的 URI 及示例 Android 操作系统中,Intent 是一个非常重要的组件,它允许不同的应用程序之间进行通信和交互。在 Android 中,Intent 是一个消息对象,它可以用来请求其他应用程序执行某些操作。...

Global site tag (gtag.js) - Google Analytics