如何将HTML转换为XHTML



可能的重复:
用于将HTML4转换为XHTML的PHP库?

PHP中有现成的函数可以实现这一点吗?基本上,我从Smarty模板中获取HTML数据,并希望通过编码将其转换为XHTML。

$filename = 'template.php'; // filepath to file
// All options : http://tidy.sourceforge.net/docs/quickref.html
$options = array('output-xhtml' => true, 'clean' => true, 'wrap-php' => true);
$tidy = new tidy(); // create new instance of Tidy
$tidy->parseFile($filename, $options); // open file
$tidy->cleanRepair(); // process with specified options
copy($filename, $filename . '.bak'); // backup current file
file_put_contents($filename, $tidy); // overwrite current file with XHTML version

我没有Smarty模板文件来测试它,但请尝试一下,看看它在转换模板时是否正确。在运行这种性质的程序时,请一如既往地备份文件。首先测试样本文件。

问题是您没有可处理的html文件。您有一个用编程语言"smarty"编写的php模板,它不是标记,即使它包含标记块。你正在寻找一根魔杖,但根本不存在这样的魔杖。

如果它是纯html,那么您可能会使用Domdocument将文件读取到Dom结构中并生成xhtml,但这对纯源文件来说根本不起作用,尽管您可能会编写一个解析器来读取smarty tpl文件,查找html片段并尝试将其加载到Domdocument对象中。

话虽如此,我首先要问的是,当xhtml基本上是一个失败的标准,在这个时候已经过时时,为什么你真的想转换为xhtml,其次,如果你有一些正当的理由想要继续前进,为什么你不能使用一些正则表达式搜索和替换更改doctype的代码片段,以及一些基于正则表达式的搜索来寻找缺少结束标记的标记,以及所需的其他相对较小的调整。html和xhtml之间的区别可以归结为一些非常容易理解的规则。

回答您最初的问题:有点。核心PHP->DOM,SimpleXML,SPL=模板引擎。这就是为什么(以及如何)存在Smarty这样的模板引擎。

重新:按照评论中的建议安装Tidy,

Tidy有一个先决条件库。如果你还没有:

http://php.net/manual/en/tidy.installation.php

要使用Tidy,您需要安装lib整洁,可在整洁主页上获得»http://tidy.sourceforge.net/.

要启用,您需要重新编译PHP并将其包含在您的配置标志中:

"此扩展与PHP 5及更高版本捆绑在一起,并已安装使用--withticity配置选项">

因此,获取现有的配置标志:

php -i | grep config

加上——用整洁。


然而,这可能是错误的方法它并不能解决您的实际问题(输出XHTML而不是HTML)-它解决了Smarty的问题。重新编译PHP以添加扩展,从而可以使用它来修复模板引擎的doctype缺陷,这可能意味着如果可能的话,您应该考虑使用不同的模板引擎。这有点激烈(并为您获得的内容增加了大量开销,这相当于一个棘手的非解决方案创可贴解决方案,可以追溯修复损坏的输出。)

PEAR的HTML_Template_PHPTAL可能是解决您问题的最佳方案,也是最接近您最初问题的答案

如果PHPTAL没有完全削减它,那么至少有5个其他可用的PEAR库可供选择

pear install http://phptal.org/latest.tar.gz

或者已经移植到Git:

git clone git://github.com/pornel/PHPTAL

粗略的谷歌搜索:http://webification.com/best-php-template-engines

HTH-

最新更新