-1

Possible Duplicate:
PHP library for converting HTML4 to XHTML?

Is there any ready made function in PHP to achieve this? Basically I'm taking HTML data from Smarty template and want to convert it into XHTML through coding.

4

3 回答 3

2
$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

I don't have a Smarty template file to test this on, but give it a try and see if it works correctly in converting one. Backup your files as always when running something of this nature. Test out on sample files first.

于 2012-12-13T06:48:10.067 回答
0

The problem is that you do not have an html file to work with. You have a php template written in the programming language "smarty" that is not markup, even though it contains blocks of markup. You're looking for a magic wand and no such wand exists.

If it was purely html, then you could probably use Domdocument to read the files into a Dom structure and generate xhtml, but that is simply not going to work with the pure source files, although you could potentially write a parser to read the smarty tpl files, look for the html snippets and try and load them into Domdocument objects.

With that said, I have to ask first -- why you really want to convert to xhtml when xhtml is basically a failed standard that is obsolete at this point in time, and secondarily, if you have some legitimate reason for wanting to forge ahead, why you can't use some regex search and replace snippets that change the doctypes and some regex based searches to look for tags that lack the end tags, and the other relatively minor tweaks needed. The differences between html and xhtml can be boiled down to a handful of rules that are pretty easy to understand.

于 2012-12-13T07:21:44.083 回答
0

In answer to your original question: sort of. Core PHP -> DOM, SimpleXML, SPL = templating engine. That's why (and how) templating engines such as Smarty exist.

Re: installing Tidy as suggested in comments,

Tidy has a prerequisite lib. If you don't already have it:

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

To use Tidy, you will need libtidy installed, available on the tidy homepage » http://tidy.sourceforge.net/.

To enable, you will need to recompile PHP and include it in your config flags:

"This extension is bundled with PHP 5 and greater, and is installed using the --with-tidy configure option."

So, get your existing config flags:

php -i | grep config

and add --with-tidy.


However, this is probably the wrong approach. It does not solve your actual problem (outputting XHTML instead of HTML) - it fixes Smarty's problem. Recompiling PHP to add an extension so you can use it to fix a templating engine's doctype shortcomings probably means you should consider using a different templating engine, if possible. That's sort of drastic (and adds a lot of overhead for what you get, which amounts to for a hacky non-solution bandaid workaround retroactively repairing broken output.)

PEAR's HTML_Template_PHPTAL is probably the best solution to your problem, and the closest answer to your original question.

And if PHPTAL doesn't quite cut it, there are at least 5 others available as PEAR libs to choose from.

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

Or it's been ported to Git:

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

A cursory google search: http://webification.com/best-php-template-engines

HTH

于 2012-12-13T07:48:39.000 回答