tomk79 / amp-convert
将HTML5文件转换为AMP格式。
0.2.0
2020-10-17 13:57 UTC
Requires
- php: >=5.5.0
- lullabot/amp: ^2.0
Requires (Dev)
- phpdocumentor/phpdocumentor: ^2.9
- phpunit/phpunit: 4.1.*
- tomk79/filesystem: ^1.0
README
将HTML5文件转换为AMP格式。
用法 - 使用方法
<?php require_once('/path/to/vendor/autoload.php'); $ampConv = new tomk79\ampConvert\AMPConverter(); $html = file_get_contents('/path/to/sample.html'); $ampConv->load($html); $amp = $ampConv->convert(); echo $amp;
转换过程
自动转换的项目
- 文档声明将被调整为
<!DOCTYPE html>。如果没有,则将其添加。 - 将为html元素添加amp属性。
- 带有charset属性的meta元素将被移动到head部分的开始处。如果没有,则将其添加。
- 带有http-equiv属性的meta元素将被删除。
- 在head元素中添加
style[amp-boilerplate]。 - 在head元素中添加
<script async src="https://cdn.ampproject.org/v0.js"></script>。 - 在head元素中添加
<meta name="viewport" content="width=device-width,minimum-scale=1">。如果已存在viewport,则强制将width替换为device-width,将minimum-scale替换为1,并保留其他值。 - 当检测到amp-iframe、amp-audio、amp-video元素时,将分别在head元素中添加必要的JavaScript库。
- 将style元素添加amp-custom属性。如果检测到多个style元素,则将它们合并为一个。
- 如果存在具有style属性的元素,则将其转换为class名,并将样式追加到style元素内,然后以class的方式引用。
- 将删除具有
application/ld+json(JSON-LD格式)、application/json以及text/json类型以外的script元素。 link[rel=stylesheet]引用的CSS将连接到style[amp-custom]。(但是,使用url()或@import等引用的文件不会连接)- 从style元素中删除
@charset、!important、CSS注释(/* 〜 */)。 - 删除条件注释(例如:
<!--[if IE 6]>)。 - body元素的内容将由 lullabot/amp 转换。
- img元素将被amp-img元素替换。如果可以引用图像文件的实际实体,则添加
width和height属性。
无法自动转换的项目
以下项目不会自动处理,需要编码上的注意。
- 通常页面的
rel=amphtmllink元素的href属性应指定AMP页面的URL。 - AMP页面的
rel=canonicallink元素的href属性应指定通常页面的URL。如果不存在,则指定自身(AMP页面)的URL。 - 建议在head元素的viewport中添加
initial-scale=1。 - 建议包含开放图形或Twitter卡片元数据。
- 样式表应控制在50KB以内。
- 除了使用自定义字体外,不能加载外部样式表。
元素
- form
- 需要读取
amp-form库。
- 需要读取
- input
- 禁止使用具有type属性
image、button、password、file的元素。
- 禁止使用具有type属性
- link
- 在rel属性中可以指定已注册在 microformats.org 的值。但是,
stylesheet(除许可的自定义字体外)、preconnect、prerender、prefetch是禁止的。
- 在rel属性中可以指定已注册在 microformats.org 的值。但是,
- a
- href属性不能以
javascript:开头。target属性必须是_blank。
- href属性不能以
- base
- frame
- frameset
- object
- param
- applet
- embed
- 被禁止。
属性
- 不能使用XML相关属性,如
xml:lang、xml:base等。 - id属性、class属性中不能包含值
-amp-或i-amp-(尽管在某些组件中允许进行一些自定义)。
样式表
- 除了
@font-face、@keyframes、@media、@supports以外,不能使用@-rules。 - 不能使用修饰符的
!important。 - 不能使用behavior属性、
-moz-binding属性、filter属性。 - 不能将
overflow、overflow-x、overflow-y指定为auto或scroll。在AMP中,用户不能将滚动条添加到内容中。
更新日志 - Change log
tomk79/amp-convert v0.2.0 (2020年10月17日)
- 将
lullabot/amp更新到^2.0。
tomk79/amp-convert v0.1.7 (2019年10月7日)
- 修正了在PHP 7.3系列中发生的问题。
- 修正了在内联的
style属性值中包含HTML特殊字符时无法正确转换的问题。
tomk79/amp-convert v0.1.6 (2019年2月17日)
- 不再将指向Web字体分发网站的
<link rel="stylesheet" />转换为其他内容。
tomk79/amp-convert v0.1.5 (2019年2月1日)
- 从生成class名中缩短了内联style属性的长度。
tomk79/amp-convert v0.1.4 (2019年1月29日)
- 当存在具有style属性的元素时,将其转换为class名,并将样式追加到style元素内,然后以class的方式引用。
- 添加了
$ampConv->get_style_attribute_collection()。 - 开始读取并合并CSS的
@import语句。
tomk79/amp-convert v0.1.3 (2019年1月7日)
- 不再删除具有
application/json、text/json类型的script标签。
tomk79/amp-convert v0.1.2 (2018年2月6日)
- 修改了amp-img的转换方式,现在会附加
layout=responsive。
tomk79/amp-convert v0.1.1 (2018年2月5日)
- 删除了CSS中的
!important和CSS注释(/* 〜 */)。 - 修正了可能会出现解析错误的不稳定问题。
tomk79/amp-convert v0.1.0 (2018年2月4日)
- 首次发布。
许可证 - License
MIT许可证
作者 - Author
- Tomoya Koyanagi tomk79@gmail.com
- 网站: https://www.pxt.jp/
- 推特: @tomk79 https://twitter.com/tomk79/