我已使用以下代码启用SVG上载:
add_filter(\'upload_mimes\', function($mimes) {
$mimes[\'svg\'] = \'image/svg+xml\';
return $mimes;
});
但是,上载以
<svg>
标记失败,通常显示“抱歉,出于安全原因,不允许使用此文件类型。”不支持SVG上载时WordPress显示的错误。
如果我添加<?xml version="1.0" encoding="UTF-8" standalone="no"?>
到文件,就在打开之前<svg>
标记,则上载成功。
为什么需要XML标记?这个要求在WordPress中是否正常,或者我的设置是否有问题?
SO网友:Jacob Peattie
要验证上载,WordPress会将文件的MIME类型与该扩展名允许的MIME类型进行比较。因此,当文件上传时,WordPress会检查文件扩展名,.svg
, 以及文件的MIME类型。然后根据.svg
扩大如果检测到的MIME类型不匹配,则拒绝上载。这样做的目的是防止危险文件以误导性的文件扩展名上载。
不过,文件MIME类型的实际检测最终由PHP处理。因此,如果SVG文件未被检测为image/svg+xml
, 这是因为PHP无法将其识别为SVG文件。正如您所发现的,如果没有<?xml ?>
标记为SVG。它可能认为该文件是HTML文件,text/html
. 这是因为HTML文档可以包含<svg>
元素,这意味着唯一可靠地区分带有SVG的HTML文件和实际SVG文件的方法是该标记的存在。
这就是为什么需要包含标签。这就是为什么image/svg+xml
文件