将 WML 的语法和标签替换为现代的 HTML5 语法,并优化其结构以适应现代浏览器和移动设备。

(图片来源网络,侵删)
下面我将分步详细解释整个转换过程,从理解差异到具体操作,再到最终的优化。
第一步:理解 WML 和 HTML 的核心区别
在动手之前,必须明白它们之间的根本不同,这决定了你的修改方向。
| 特性 | WML (Wireless Markup Language) | HTML (HyperText Markup Language) | 说明 |
|---|---|---|---|
| 文档类型 | <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> |
<!DOCTYPE html> 或 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"> |
WML 有自己固定的 DTD,HTML5 的 DTD 更简洁。 |
| 根标签 | <wml> |
<html> |
WML 文档的根标签是 <wml>,HTML 的是 <html>。 |
| 字符编码 | <meta http-equiv="Content-Type" content="text/vnd.wap.wml; charset=gb2312"/> |
<meta charset="UTF-8"> |
WML 的内容类型是 text/vnd.wap.wml,HTML 的是 text/html。 |
| 页面结构 | <wml><head>...</head><card id="main" title="标题">...</card></wml> |
<html><head>...</head><body>...</body></html> |
WML 使用 <card> 来划分页面内容,一个 WML 文件可以包含多个 <card>,HTML 使用 <body>。 |
| 标签语义 | <p>, <br/>, <b>, <i>, <a>, <img/>, <table>, <tr>, <td> 等。 |
<p>, <br>, <strong>, <em>, <a>, <img>, <table>, <tr>, <td> 等。 |
大部分基础标签功能相似,但 WML 是自闭合标签(如 <br/>),HTML5 中可以省略 (如 <br>)。 |
| 表单 | <input>, <select>, <option>, <do type="accept"> |
<input>, <select>, <option>, <button> |
WML 的 <do> 标签用于定义软键操作,HTML 中用 <button> 或普通 <a> 标签实现。 |
| 导航 | <a href="#card_id"> (卡片间跳转) |
<a href="#section_id"> (锚点跳转) |
WML 可以在同一个文件的 <card> 之间跳转,HTML 在页面内用锚点跳转。 |
| CSS | <wml><head><style type="text/css">...</style></head> |
<html><head><style>...</style></head> |
内联样式写法类似,但 WML 通常更简单。 |
| 脚本 | WMLScript (类似 JavaScript,但已基本淘汰) | JavaScript | WMLScript 支持极差,基本都需要移除或重写为 JS。 |
第二步:转换的具体步骤
转换工作主要涉及修改 DedeCMS 的模板文件(.htm 文件)和相关的 CSS/JS 文件。
修改文档结构和头部
这是最基础也是最重要的一步。

(图片来源网络,侵删)
原始 WML 模板 (article_wap.htm) 可能是这样的:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="Cache-Control" content="max-age=0"/>
<meta http-equiv="Cache-Control" content="no-cache"/>
<meta http-equiv="Content-Type" content="text/vnd.wap.wml; charset=gb2312"/>
</head>
<card id="main" title="文章标题">
<p>
<!-- 这里是 DedeCMS 的标签,如 {dede:field.title/} -->
<a href="{dede:field name='phpurl'/}/index.php">首页</a> >
<a href="{dede:field name='typelink'/}">{dede:field.typename/}</a> >
{dede:field.title/}
</p>
<p>{dede:field.body/}</p>
</card>
</wml>
转换后的 HTML 模板 (article_mobile.htm 或 article.htm) 应该是这样的:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">{dede:field.title/}_{dede:global.cfg_webname/}</title>
<meta name="keywords" content="{dede:field.keywords/}" />
<meta name="description" content="{dede:field.description function='html2text(@me)'/}" />
<!-- 引入移动端适配的 CSS 文件 -->
<link rel="stylesheet" href="/static/css/mobile-style.css">
</head>
<body>
<div class="header">
<a href="{dede:field name='phpurl'/}/index.php">首页</a> >
<a href="{dede:field name='typelink'/}">{dede:field.typename/}</a> >
{dede:field.title/}
</div>
<article class="article-content">
{dede:field.body/}
</article>
<!-- 引入 JS 文件 -->
<script src="/static/js/mobile-script.js"></script>
</body>
</html>
修改要点:
- DOCTYPE 和
<html>: 替换为 HTML5 的标准格式。 - 字符编码: 将
Content-Type改为text/html,并使用<meta charset="UTF-8">,强烈建议统一使用UTF-8编码,避免乱码。 <card>变为<body>: 将<card id="main">...</card>内的所有内容放入<body>...</body>中。- 添加 Viewport Meta 标签: 这是移动端适配的关键,
<meta name="viewport" ...>告诉浏览器如何控制页面的尺寸和缩放。 - 语义化标签: 使用
<header>,<article>,<footer>等HTML5语义化标签替代<p>,使结构更清晰,对SEO友好。
转换标签和内容
- WML 自闭合标签: 将
<br/>,<img/>等标签的尾部 去掉,变成<br>,<img>,HTML5 规范中这不是必须的,但保留也无妨。 - WML
<do>: 这是 WML 的特色,用于定义软键(如“确认”、“返回”),在 HTML 中,这些功能通常用<button>或<a>标签实现。- WML 原始代码:
<do type="accept" label="确认"> <go href="#next_card"/> </do> - HTML 转换后:
<a href="#next_section" class="btn btn-primary">确认</a>
- WML 原始代码:
- WML 卡片间跳转: WML 文件中有多个
<card>并且通过href="#card_id"跳转,在 HTML 中你需要:- 将每个
<card>的内容拆分成独立的 HTML 页面。 - 或者,在同一页面内,将
<card id="xxx">变成一个<div id="section-xxx">,然后将链接指向#section-xxx(页面内锚点),这种方法适用于单页应用,但要注意内容长度。
- 将每个
处理样式和脚本
- CSS: WML 的 CSS 支持非常有限,你需要为新的 HTML 结构编写一套全新的 CSS,专门用于移动端适配,通常会使用:
- 响应式设计: 使用媒体查询 (
@media) 来适配不同屏幕尺寸。 - REM/EM/VW 单位: 相对单位,让页面可以更灵活地缩放。
- Flexbox 或 Grid: 用于复杂的页面布局。
- 响应式设计: 使用媒体查询 (

(图片来源网络,侵删)
