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]

Reply via email to