PHP中是否有现成的功能来实现这一目标?基本上我是从Smarty模板中获取HTML数据,并希望通过编码将其转换为XHTML。
答案 0 :(得分:1)
$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模板文件来测试它,但试试看它是否在转换它时是否正常工作。在运行这种性质的东西时,一如既往地备份文件。首先测试样本文件。
答案 1 :(得分:0)
问题是您没有可以使用的html文件。你有一个用编程语言“smarty”编写的php模板,它不是标记,即使它包含标记块。你正在寻找一根魔杖而不存在这样的魔杖。
如果它纯粹是html,那么你可以使用Domdocument将文件读入Dom结构并生成xhtml,但这根本不适用于纯源文件,尽管你可能会编写一个解析器来读取聪明的tpl文件,查找html片段并尝试将它们加载到Domdocument对象中。
有了这个说法,我首先要问 - 为什么你真的想转换为xhtml,当xhtml基本上是一个在这个时候已经过时的失败标准,其次,如果你有一些合理的理由想要提前进行,为什么你不能使用一些正则表达式搜索并替换更改doctypes的片段和一些基于正则表达式的搜索来查找缺少结束标记的标签,以及需要的其他相对较小的调整。 html和xhtml之间的区别可以归结为一些很容易理解的规则。
答案 2 :(得分:0)
回答你原来的问题:有点儿。核心PHP - > DOM,SimpleXML,SPL =模板引擎。这就是为什么(以及如何)存在Smarty等模板引擎的原因。
重新:按照评论中的建议安装Tidy
Tidy有一个先决条件lib。如果您还没有:
http://php.net/manual/en/tidy.installation.php
要使用Tidy,您需要安装libtidy,可在整洁的主页上找到» http://tidy.sourceforge.net/
要启用,您需要重新编译PHP并将其包含在配置标志中:
“此扩展程序与PHP 5及更高版本捆绑在一起,并已安装 使用 - with-tidy 配置选项。“
因此,获取现有的配置标志:
php -i | grep config
并添加--with-tidy。
但是,这可能是错误的方法。 它无法解决您的实际问题(输出XHTML而不是HTML) - 它修复了Smarty的问题。重新编译PHP以添加扩展,以便您可以使用它来修复模板引擎的doctype缺点,这可能意味着您应该考虑使用不同的模板引擎(如果可能)。这有点激烈(并且为你得到的东西增加了很多开销,这相当于一个hacky非解决方案的bandaid变通方法,可以追溯修复损坏的输出。)
如果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