Hi.
I don't think that php support xhtml well now, throught
php-4.0.6 support <script language="php"> tag.
I modify some php source, mainly about
sapi_apache & zend language scanner.
So that the xhtml file which comprises php code will
be well xml formed.
1.Add a mime/type application/x-httpd-php-xhtml to mark xhtml
mode.
2.disable short-tags and asp-tags in xhtml mode.
3.add <php> ... </php> instead <? ... ?>
and <php-v eval="...."/> instead <?= .... ?>
4.ignore '<![CDATA[' and ']]>' in script block.
The patch is atteching the mail.
Regards
Andy Yu
--- php-4.0.6/sapi/apache/mod_php4.c.xhtml Wed Oct 3 01:11:21 2001
+++ php-4.0.6/sapi/apache/mod_php4.c Wed Oct 3 01:32:37 2001
@@ -71,6 +71,7 @@
int sapi_apache_send_headers(sapi_headers_struct *sapi_headers SLS_DC);
static int send_php(request_rec *r, int display_source_mode, char *filename);
static int send_parsed_php(request_rec * r);
+static int send_parsed_php_xhtml(request_rec * r);
static int send_parsed_php_source(request_rec * r);
int php_xbithack_handler(request_rec * r);
void php_init_handler(server_rec *s, pool *p);
@@ -547,7 +548,10 @@
return send_php(r, 0, NULL);
}
-
+static int send_parsed_php_xhtml(request_rec * r)
+{
+ return send_php(r, 2, NULL);
+}
static int send_parsed_php_source(request_rec * r)
{
return send_php(r, 1, NULL);
@@ -758,6 +762,7 @@
handler_rec php_handlers[] =
{
{"application/x-httpd-php", send_parsed_php},
+ {"application/x-httpd-php-xhtml", send_parsed_php_xhtml},
{"application/x-httpd-php-source", send_parsed_php_source},
{"text/html", php_xbithack_handler},
{NULL}
--- php-4.0.6/sapi/apache/sapi_apache.c.xhtml Wed Oct 3 01:34:13 2001
+++ php-4.0.6/sapi/apache/sapi_apache.c Wed Oct 3 15:45:41 2001
@@ -70,6 +70,17 @@
// so let zend open it.
*/
+ if (display_source_mode == 2) {
+ CG(short_tags) = 0;
+ CG(xhtml_tags) = 1;
+ CG(asp_tags) = 0;
+ display_source_mode = 0;
+ } else {
+ CG(short_tags) = 1;
+ CG(xhtml_tags) = 0;
+ CG(asp_tags) = 1;
+ }
+
if (display_source_mode) {
zend_syntax_highlighter_ini syntax_highlighter_ini;
--- php-4.0.6/Zend/zend_globals.h.xhtml Wed Oct 3 01:08:54 2001
+++ php-4.0.6/Zend/zend_globals.h Wed Oct 3 01:16:06 2001
@@ -96,6 +96,7 @@
zend_bool in_compilation;
zend_bool short_tags;
+ zend_bool xhtml_tags;
zend_bool asp_tags;
zend_bool allow_call_time_pass_reference;
--- php-4.0.6/Zend/zend.c.xhtml Wed Oct 3 01:16:14 2001
+++ php-4.0.6/Zend/zend.c Wed Oct 3 01:16:34 2001
@@ -255,6 +255,7 @@
/* default compile-time values */
CG(asp_tags) = 0;
CG(short_tags) = 1;
+ CG(xhtml_tags) = 0;
CG(allow_call_time_pass_reference) = 1;
CG(extended_info) = 0;
}
--- php-4.0.6/Zend/zend_language_scanner.l.xhtml Wed Oct 3 01:37:50 2001
+++ php-4.0.6/Zend/zend_language_scanner.l Wed Oct 3 15:08:55 2001
@@ -1062,7 +1062,7 @@
}
-<INITIAL>(([^<]|"<"[^?%s<]){1,400})|"<s"|"<" {
+<INITIAL>(([^<]|"<"[^?%sp<]){1,400})|"<s"|"<p"|"<" {
zendlval->value.str.val = (char *) estrndup(yytext, yyleng);
zendlval->value.str.len = yyleng;
zendlval->type = IS_STRING;
@@ -1070,7 +1070,7 @@
return T_INLINE_HTML;
}
-<INITIAL>"<?"|"<script"{WHITESPACE}+"language"{WHITESPACE}*"="{WHITESPACE}*("php"|"\"php\""|"\'php\'"){WHITESPACE}*">"
{
+<INITIAL>"<?"|"<php"{WHITESPACE}*">"{WHITESPACE}*{NEWLINE}*"<![CDATA["?|"<script"{WHITESPACE}+"language"{WHITESPACE}*"="{WHITESPACE}*("php"|"\"php\""|"\'php\'"){WHITESPACE}*">"
+ {
HANDLE_NEWLINES(yytext,yyleng);
if (CG(short_tags) || yyleng>2) { /* yyleng>2 means it's not <? but <script> */
zendlval->value.str.val = yytext; /* no copying - intentional */
@@ -1087,9 +1087,10 @@
}
-<INITIAL>"<%="|"<?=" {
+<INITIAL>"<%="|"<?="|"<php-v"{WHITESPACE}*"eval"{WHITESPACE}*"="{WHITESPACE}*"\"" {
if ((yytext[1]=='%' && CG(asp_tags))
- || (yytext[1]=='?' && CG(short_tags))) {
+ || (yytext[1]=='?' && CG(short_tags))
+ || (yytext[1]=='p' && CG(xhtml_tags))) {
zendlval->value.str.val = yytext; /* no copying - intentional */
zendlval->value.str.len = yyleng;
zendlval->type = IS_STRING;
@@ -1228,7 +1229,16 @@
yymore();
}
-<ST_IN_SCRIPTING>("?>"|"</script"{WHITESPACE}*">"){NEWLINE}? {
+<ST_IN_SCRIPTING>"]]>"{WHITESPACE}*{NEWLINE}?"</php"{WHITESPACE}*">" {
+ zendlval->value.str.val = yytext; /* no copying - intentional */
+ zendlval->value.str.len = yyleng;
+ zendlval->type = IS_STRING;
+ HANDLE_NEWLINES(yytext, yyleng);
+ BEGIN(INITIAL);
+ return T_CLOSE_TAG; /* implicit ';' at php-end tag */
+
+}
+<ST_IN_SCRIPTING>("?>"|"\""{WHITESPACE}*"/>"|"</php>"|"</script"{WHITESPACE}*">"){NEWLINE}?
+ {
zendlval->value.str.val = yytext; /* no copying - intentional */
zendlval->value.str.len = yyleng;
zendlval->type = IS_STRING;
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]