tomk79/amp-convert

将HTML5文件转换为AMP格式。

0.2.0 2020-10-17 13:57 UTC

This package is auto-updated.

Last update: 2024-09-17 22:16:41 UTC


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元素替换。如果可以引用图像文件的实际实体,则添加 widthheight 属性。

无法自动转换的项目

以下项目不会自动处理,需要编码上的注意。

  • 通常页面的 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属性 imagebuttonpasswordfile 的元素。
  • link
    • 在rel属性中可以指定已注册在 microformats.org 的值。但是,stylesheet(除许可的自定义字体外)、preconnectprerenderprefetch 是禁止的。
  • a
    • href属性不能以 javascript: 开头。target属性必须是 _blank
  • base
  • frame
  • frameset
  • object
  • param
  • applet
  • embed
    • 被禁止。

属性

  • 不能使用XML相关属性,如xml:langxml:base等。
  • id属性、class属性中不能包含值-amp-i-amp-(尽管在某些组件中允许进行一些自定义)。

样式表

  • 除了@font-face@keyframes@media@supports以外,不能使用@-rules
  • 不能使用修饰符的!important
  • 不能使用behavior属性、-moz-binding属性、filter属性。
  • 不能将overflowoverflow-xoverflow-y指定为autoscroll。在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/jsontext/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