V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
exc
V2EX  ›  问与答

ThinkPHP 的 Controller 控制器里如何不使用模板输出 Html

  •  
  •   exc · 2016-11-24 19:19:22 +08:00 · 4322 次点击
    这是一个创建于 2922 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ThinkPHP 的 Controller 控制器里如何不使用模板输出 Html ,而不是 Html 源代码

    使用

    ```
    echo "<html><b>abc</b><html>
    ```

    在浏览器上显示的是

    ```
    <html><b>abc</b><html>
    ```

    我想要的是加粗的是 abc

    怎么办 google 半天没有到点子上 求助
    第 1 条附言  ·  2016-11-25 12:27:53 +08:00
    之前描述中忽略了一个信息,我设置了自定义头
    ```
    header('content-type: application/json; charset=utf-8');
    ```
    -------------------------
    ETiV 的方法可以正常输出 html 内容
    ```
    header('content-type: text/html; charset=utf-8');
    ```
    以上代码放在 class 代码块外面即可
    -------------------------
    jessynt 的方法也可以输出 html 内容
    ```
    $this->show($html);
    ```
    14 条回复    2016-11-25 11:57:02 +08:00
    exc
        1
    exc  
    OP
       2016-11-24 19:23:24 +08:00
    是 echo "<html><b>abc</b><html>"

    少了一个引号
    pouta
        2
    pouta  
       2016-11-24 19:49:32 +08:00 via Android
    转义字符?
    exc
        3
    exc  
    OP
       2016-11-24 19:57:38 +08:00
    不是 , thinkphp 对 echo 做了重载,会原样输出 html 代码, 而我现在不需要这个功能,想原样输出 html ,可对 thinkphp 配置不熟悉,找不到方法
    wesley
        4
    wesley  
       2016-11-24 20:14:10 +08:00
    谁告诉你 echo 能被重载?
    exc
        5
    exc  
    OP
       2016-11-24 20:32:41 +08:00 via Android
    我没说清,不是重载, thinkphp 在控制器里对 echo 的输出内容做了拦截再处理,从而起到了类似重载的效果,不知道对不对
    cdwyd
        6
    cdwyd  
       2016-11-24 20:34:46 +08:00 via Android
    return html 代码
    exc
        7
    exc  
    OP
       2016-11-24 21:26:55 +08:00
    @cdwyd 谢谢

    不过直接 return ,页面是一片空白的

    我的代码

    ```
    <?php
    namespace Demo\Controller;
    use Think\Controller;

    class TestController extends Controller {
    public function test() {
    $html = '<html><body><b>abc</b>def</body></html>';
    return $html;
    }
    }
    ```
    jessynt
        8
    jessynt  
       2016-11-24 21:40:45 +08:00
    Try this
    1762628386
        9
    1762628386  
       2016-11-24 22:53:23 +08:00
    function idnex(){
    echo '<script>alert("no encode")</script>';
    die;
    }
    cdwyd
        10
    cdwyd  
       2016-11-25 01:12:22 +08:00
    可以直接 return 的吧,官方的默认页面都是直接 return 的
    ETiV
        11
    ETiV  
       2016-11-25 01:19:12 +08:00
    - -

    试试输出自定义头: content-type: text/html
    my101du
        12
    my101du  
       2016-11-25 08:01:37 +08:00
    8 楼正解。
    话说你装好 ThinkPHP 后就不看一眼它的文档和默认生成的代码 Home/Controller/IndexController.class.php 之 index() 方法,然后就上来发帖了?
    likezun
        13
    likezun  
       2016-11-25 08:44:03 +08:00
    珍爱生命,
    exc
        14
    exc  
    OP
       2016-11-25 11:57:02 +08:00
    @1762628386 谢谢,这样写会输出: <script>alert("no encode")</script> ,不会弹出对话框

    @cdwyd 直接 return 显示是的一个空白页面

    @ETiV 非常感谢,这个可以用,之前我为了写 api 将自定义头设置为 application/json ,改成 text/html 后使用 echo 就可以成功输出 html 内容了,且输出 json 目前看也没有问题,再次感谢

    @jessynt 谢谢,你的方法可以用,不过在我的应用场景中报错了,可能我输出的内容比较复杂,包含大量的 css/js 和注释语句

    @my101du 8 楼、 10 楼的可以用。装 thinkphp 后文档看了,没完整看完,是我的学习方法不对,多谢指点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1210 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:49 · PVG 01:49 · LAX 09:49 · JFK 12:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.