php - 根据浏览器功能动态包含 PHP

标签 php javascript html xhtml include

重写

我有一个用 HTML5 编写的网站,还有一个用 XHTML 编写的网站。我想根据某人是否使用支持 HTML5 一些最基本功能的浏览器来呈现其中之一。

注意

该网站不使用 HTML5 的 Canvas 、音频或视频功能。它只是简单地标记为aside、section、nav 等,并使用CSS3 的一些有趣功能来进行样式装饰。 HTML5 网站和 XHTML 网站之间的差异很小,如果我能做到这一点,可能任何人都不会注意到。内容是一样的,只是呈现方式略有不同。

我这样做的原因

一旦恐龙浏览器消失,我希望我可以简单地发布 HTML5 网站,并废除旧的 XHTML。

我遇到了一些后勤障碍,并且还没有完全阐明我想要如何解决这个问题。我最初的想法是使用 Javascript 条件语句来确定要渲染的 PHP 内容。是的,继续笑吧,也许有一天我也会笑。在对此进行调查时,有人评论说 XML 可能使这成为可能。我相当擅长 JavaScript、PHP 和 XML。这是我第一次尝试将 Javascript 与 PHP 集成,所以现在我明白为什么我原来的计划需要更多的工作。

最终,我强烈地感觉到这就是我想要前进的方式。我读到了有关渐进增强与优雅降级的内容,但我决定要为我的客户提供一个漂亮的网站,使用所有新的语义标签和简单的样式选择器来提高 SEO 并保证当 HTML4 消失时,这个新网站将屹立不倒时间的考验……至少在一段时间内。

如果你强烈反对这种方式,我愿意听听你的意见。无论哪种方式,请分享您的想法。

最佳答案

你所要求的是不可能的;正如我已经解释过的,PHP 是服务器端,JS 是客户端; php 端所做的任何事情都在页面交付给用户时完成,因此 js 不可能影响 php 端,除非您的网站或内容交付完全在 ajax 中完成,这是一种利用js和php检索信息的方法;简而言之,js 向你服务器上的另一个 php 页面发送请求并返回结果。

然而,这要复杂得多,在您更熟悉 JS 和 PHP 之前,我不建议您这样做。

除此之外,尽管我现在没有完整的代码,但 php 中有一个解决方案。

解决办法是get_browser()的php 4和5函数:

$arr = get_browser(null, true);
$var = "some browser";
if ($arr['parent'] == $var) {
   require('/php/file.php');
}
else {
   //etc
}

以上是您的答案更新之前的内容;对于上述更新我没有什么可说的。

更新:关于下面有关ajax的评论之一,我将尝试..一个例子。我不会尝试称其为“简单”,因为 ajax 绝非......不过回到正题......

HTML:

<html>
    <body>
        <div id="main_body">
        </div>
    </body>
</html>

JS:

//some code to determine user-agent/browser, set variable 'agent' with result
var use_html5;
if (agent == browser) {
    use_html5 = 'yes'
}
else {
    use_html5 = 'no'
}

function retrv_body() {
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4) {//readState 4 is when the request has finished;
            //0: request not initialized 
            //1: server connection established
            //2: request received 
            //3: processing request 
            //4: request finished and response is ready
            document.getElementById('main_body').innerHTML = xmlhttp.responseText;
            //set html of div with id 'main_body' to rendering retrieved from php_file_in_same_dir.php
        }
    }
    xmlhttp.open("POST","php_file_in_same_dir.php",true); 
    //set type of form, boolean is in regards to whether the request is asynchronus or synchronous
    //most ajax requests are async, which means they themselves finish executing usually after the function itself has run.  I'm not truly knowledgeable regarding this specific thing since I've only ever used async requests, though I would assume being a sync request would mean the function actually waits until it returns a value before it finishes executing.
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    //set the headers of the content.
    xmlhttp.send("html5=" + use_html5);
    //finally, send the data.  Depending on the data, the data may need to be url-encoded.
}

retrv_body();

PHP:

<?php
if ($_POST['html5'] == 'yes') {
    include('body5.php');
}
else {
    include('body_other.php');
}
//body generating code, render page.
?>

上面只是一个例子,我不建议实际使用它,保存retrv_body()函数,并将其更改为您真正可以使用的东西。

希望我在代码中添加的注释有助于理解;如果有任何疑问,请随时要求我解释得更彻底。

关于php - 根据浏览器功能动态包含 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11405366/

相关文章:

javascript - XMLHttpRequest 读取渐进式数据不起作用?

php - 如何使用 v1 API 将 FCM 通知发送到特定设备 token 列表

php - 如何在mysql中加入像pivot这样的未知条件

javascript - 如何制作灯泡菜单?

javascript - 需要帮助使用超链接创建 php 和/或 javascript 以更改网页上的语言

python - 使用正则表达式刮取不带括号的干净科学名称

html - 为什么 Web 内容包装在包装器 div 中?

php - 如何使用 header 引荐来源网址重定向或允许访问网站

php - PHP PCRE 中的\x 是什么意思?

javascript - 在没有框架的情况下如何使 JavaScript 更短/更好?