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=amphtml
link元素的href属性应指定AMP页面的URL。 - AMP页面的
rel=canonical
link元素的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/