Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
53a115ae
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
53a115ae
编写于
8月 23, 2019
作者:
R
Ryuta Kamizono
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Merge pull request #37017 from kamipo/fix_content_type
Fix `content_type=` to not discard extra part
上级
da98bd8f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
23 addition
and
7 deletion
+23
-7
actionpack/lib/action_dispatch/http/response.rb
actionpack/lib/action_dispatch/http/response.rb
+10
-5
actionpack/test/controller/content_type_test.rb
actionpack/test/controller/content_type_test.rb
+11
-0
actionpack/test/dispatch/response_test.rb
actionpack/test/dispatch/response_test.rb
+2
-2
未找到文件。
actionpack/lib/action_dispatch/http/response.rb
浏览文件 @
53a115ae
...
...
@@ -82,7 +82,6 @@ def each(&block)
SET_COOKIE
=
"Set-Cookie"
LOCATION
=
"Location"
NO_CONTENT_CODES
=
[
100
,
101
,
102
,
204
,
205
,
304
]
CONTENT_TYPE_PARSER
=
/\A(?<type>[^;\s]+)?\s*(?:;\s*(?<extra>.+))?(?:;\s*charset=(?<quote>"?)(?<charset>[^;\s]+)\k<quote>)/
# :nodoc:
cattr_accessor
:default_charset
,
default:
"utf-8"
cattr_accessor
:default_headers
...
...
@@ -420,14 +419,20 @@ def cookies
end
private
ContentTypeHeader
=
Struct
.
new
:mime_type
,
:extra
,
:charset
NullContentTypeHeader
=
ContentTypeHeader
.
new
nil
,
nil
,
nil
ContentTypeHeader
=
Struct
.
new
:mime_type
,
:charset
NullContentTypeHeader
=
ContentTypeHeader
.
new
nil
,
nil
CONTENT_TYPE_PARSER
=
/
\A
(?<mime_type>[^;\s]+\s*(?:;\s*(?:(?!charset)[^;\s])+)*)?
(?:;\s*charset=(?<quote>"?)(?<charset>[^;\s]+)\k<quote>)?
/x
# :nodoc:
def
parse_content_type
(
content_type
)
if
content_type
&&
match
=
CONTENT_TYPE_PARSER
.
match
(
content_type
)
ContentTypeHeader
.
new
(
match
[
:
type
],
match
[
:extra
],
match
[
:charset
])
ContentTypeHeader
.
new
(
match
[
:
mime_type
],
match
[
:charset
])
else
ContentTypeHeader
.
new
(
content_type
,
nil
)
NullContentTypeHeader
end
end
...
...
actionpack/test/controller/content_type_test.rb
浏览文件 @
53a115ae
...
...
@@ -50,6 +50,11 @@ def render_default_content_types_for_respond_to
format
.
rss
{
render
body:
"hello world!"
,
content_type:
Mime
[
:xml
]
}
end
end
def
render_content_type_with_charset
response
.
content_type
=
"text/html; fragment; charset=utf-16"
render
body:
"hello world!"
end
end
class
ContentTypeTest
<
ActionController
::
TestCase
...
...
@@ -131,6 +136,12 @@ def test_change_for_builder
assert_equal
"utf-8"
,
@response
.
charset
end
def
test_content_type_with_charset
get
:render_content_type_with_charset
assert_equal
"text/html; fragment"
,
@response
.
media_type
assert_equal
"utf-16"
,
@response
.
charset
end
private
def
with_default_charset
(
charset
)
...
...
actionpack/test/dispatch/response_test.rb
浏览文件 @
53a115ae
...
...
@@ -572,7 +572,7 @@ class ResponseIntegrationTest < ActionDispatch::IntegrationTest
assert_equal
(
"text/csv; header=present; charset=utf-16"
,
@response
.
headers
[
"Content-Type"
])
assert_equal
(
"text/csv; header=present; charset=utf-16"
,
@response
.
content_type
)
assert_equal
(
"text/csv"
,
@response
.
media_type
)
assert_equal
(
"text/csv
; header=present
"
,
@response
.
media_type
)
assert_equal
(
"utf-16"
,
@response
.
charset
)
end
...
...
@@ -590,7 +590,7 @@ class ResponseIntegrationTest < ActionDispatch::IntegrationTest
assert_equal
(
'text/csv; header=present; charset="utf-16"'
,
@response
.
headers
[
"Content-Type"
])
assert_equal
(
'text/csv; header=present; charset="utf-16"'
,
@response
.
content_type
)
assert_equal
(
"text/csv"
,
@response
.
media_type
)
assert_equal
(
"text/csv
; header=present
"
,
@response
.
media_type
)
assert_equal
(
"utf-16"
,
@response
.
charset
)
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录