惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
O
OpenAI News
WordPress大学
WordPress大学
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
IT之家
IT之家
Last Week in AI
Last Week in AI
Vercel News
Vercel News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
B
Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
P
Proofpoint News Feed
Application and Cybersecurity Blog
Application and Cybersecurity Blog
MyScale Blog
MyScale Blog
Schneier on Security
Schneier on Security
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
News and Events Feed by Topic
Google Online Security Blog
Google Online Security Blog
N
News | PayPal Newsroom
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google DeepMind News
Google DeepMind News
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
The GitHub Blog
The GitHub Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Announcements
Recent Announcements
L
LINUX DO - 最新话题
TaoSecurity Blog
TaoSecurity Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
F
Fortinet All Blogs
罗磊的独立博客
Forbes - Security
Forbes - Security
人人都是产品经理
人人都是产品经理
J
Java Code Geeks
H
Heimdal Security Blog
Help Net Security
Help Net Security
V
V2EX
Security Latest
Security Latest
W
WeLiveSecurity
Attack and Defense Labs
Attack and Defense Labs
H
Help Net Security

Ruby on Rails

以后发软件库是不是只用发 spec? - V2EX OpenCode + GLM-4.7 还是弟弟, Antigravity + Gemini 3 Pro 还是强不少,不写一行代码转译了一个 Gem: rb-edge-tts - V2EX Ruby on Rails 用着太舒服了 - V2EX 手把手教您在 Baklib 上搭建一个模板网站 - V2EX 我回来了, Ruby on Rails - V2EX Ruby on Rails 国内使用情况 - V2EX 推荐一个 Admin Panel - V2EX 当我更换 mac m2 芯片 无法使用使用 mysql2 报错 symbol not found in flat namespace (_mysql_affected_rows) - V2EX 后端收到两次重复 api 请求,如何判断第二次是重复的? - V2EX Rails 7 发布 - V2EX 大家写 ruby on rails applications 的时候一般怎么写前端页面? - V2EX 如何动态显示和保存一系列输入框中的内容 - V2EX ruby on rails: no implicit conversion of nil into String - V2EX Rails 现在国内是不是有点凉了? - V2EX Rails 6.1 升级记录 - V2EX 使用 Vue 前端、Rails 后端实现图片上传的功能 - V2EX 写了个在线约会的日历,已经部署在公有云上了,正文有访问链接 - V2EX Ruby, Rails 不值一学 - V2EX Rails new 命令一直转圈怎么办? 大家都用什么来部署 ROR 的? - V2EX ruby on rails 做 web 开发,效率真是杠杠的啊 - V2EX 如果有一天 DHH 没有再维护 ror 了怎么办? - V2EX Ruby on Rails 怎么样? - V2EX 世界无人帆船锦标赛,招募两名 Ruby 志愿者的参与 正在看 restful rail development 这本书,按照书上写的测试报错了,大佬帮我看看 - V2EX spree 电商框架怎么样 - V2EX 送几本《Rails 5 敏捷开发》 - V2EX Rails 布署最佳实践 Rails Seed Migration 问题 - V2EX 心好累 ruby 发一个 OAuth1.0 的请求怎么这么难 - V2EX Ruby on Rails 的工程怎么做 heap dump? - V2EX 为什么是 Ruby on Rails?而不是 Rails on Ruby? - V2EX Turbolinks 会导致微信网页在 iOS 上点击链接时出现 invalid signature 错误, Android 和开发者工具则正常 - V2EX ruby on rails 如何上传 swf 文件 - V2EX 初学者请教一个 ruby 使用 leveldb 的问题 - V2EX Rails 本地开发,访问网站巨慢,你们都是怎么解决的? - V2EX RESTful API 设计问题(很基础) - V2EX ruby 中使用类变量是 bad code style 吗?有没有替代品? - V2EX jenkins 执行 ruby -v 和在 slave 上执行 ruby -v 版本不一致 - V2EX Tower,Worktile,Teambition 在低层存储上的差别是什么? - V2EX 良心之作,全站工程师的独白 [视频] - V2EX 有没有人用个人电脑+花生壳+RoR,在家搭建一个自己的服务器? - V2EX 之前已经可以写一些简单的东西了,现在发现都忘完了,有没有类似经历的同学?怎么破? - V2EX 视频推荐:使用 Rails 5 开发一款 Ruby on Rails app - V2EX Ruby on Rails 教程(原书第 4 版)发布 - V2EX 一个美女程序员开发的 Rails App - V2EX 需要长期运营的项目,千万别用 rails - V2EX Rails 出 5.0 了 - V2EX ruby 如何做 race conditions 测试? - V2EX
球写一段及其简单的 Ruby 代码 - V2EX
wadezhao · 2016-12-08 · via Ruby on Rails
wadezhao

15

wadezhao      2016 年 12 月 8 日

@lightening
嗯,谢谢。
是这样,原始的代码,最终体现到页面上,是这样的:

<img src="/attachments/download/455/02%E5%AE.jpg">

但是这张图片并不显示,如果你直接点击这个图片,会提示一段 HTML 代码,说这个文件不存在,而不存的文件名,并不是"02%E5%AE.jpg",而是一个“乱码.jpg ”,换句话说,直接点击,会告诉你

http://URL/attachments/download/455/乱码乱码乱码.jpg 不存在

看上去,像是 Windows 下的 Ruby ,或者是源代码,对中文文件名的处理有一点问题。
所以我就寻找解决方案,最彻底的方案当然是找到乱码的原因,不过这个不好找,我找了一个妥协的方案,那就是,我发现其实直接把文件名去掉的话,是能显示的,就是说

<img src="/attachments/download/455/">

是可以正常显示的。所以我就想,只要能找到生成这一段代码的 Ruby 源码,生成的字符串,将最后一个“/”之后的字符全删掉,不就行了么?
于是我就找到了这一部分,这一部分的源码是这样的:

def inline_textile_image( text )
text.gsub!( IMAGE_RE ) do |m|
stln,algn,atts,url,title,href,href_a1,href_a2 = $~[1..8]
htmlesc title
atts = pba( atts )
atts = " src=\"#{ htmlesc url.dup }\"#{ atts }"
atts << " title=\"#{ title }\"" if title
atts << " alt=\"#{ title }\""
# size = @getimagesize($url);
# if($size) $atts.= " $size[3]";

href, alt_title = check_refs( href ) if href
url, url_title = check_refs( url )

out = ''
out << "<a#{ shelve( " href=\"#{ href }\"" ) }>" if href
out << "<img#{ shelve( atts ) } />"
out << "</a>#{ href_a1 }#{ href_a2 }" if href

if algn
algn = h_align( algn )
if stln == "<p>"
out = "<p style=\"float:#{ algn }\">#{ out }"
else
out = "#{ stln }<div style=\"float:#{ algn }\">#{ out }</div>"
end
else
out = stln + out
end

out
end
end

虽然我不懂 Ruby ,不过看上去,这一行就是关键:

atts = " src=\"#{ htmlesc url.dup }\"#{ atts }"

看起来,生成<img>的“ src ”内容的,就是这一句,而这个 htmlesc 显然是一个函数,用于处理 URL.DUP 这个变量(这个我并不知道是什么,看字面意思似乎是将 URL 变量复制了一份?)

于是就有了我上面的问题,我找到了最初对 htmlesc 这个函数的定义,希望通过修改它来达到我的目的。

但奇怪的是,修改后,并没有如我想象的写回

<img src="/attachments/download/455/">

写回的是

<img src="">

所以我猜测,也许后面对输出的字符串还是做了什么修改,高度怀疑这几句:

out = ''
out << "<a#{ shelve( " href=\"#{ href }\"" ) }>" if href
out << "<img#{ shelve( atts ) } />"
out << "</a>#{ href_a1 }#{ href_a2 }" if href

但是这个语法我就看不太懂了…………现在就卡在这里了………………