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]