代码之家  ›  专栏  ›  技术社区  ›  Edgar Alexander

这是PHP异常系统的错误吗?

  •  0
  • Edgar Alexander  · 技术社区  · 10 年前

    我有:

    <?php
    
        try 
        {
            throw new Exception('Debes iniciar sesión para esto.', 1); // This is a null exception.
            throw new Exception('Debes iniciar sesion para esto.', 1); // This is not a null exception.
        }
        catch (Exception $ex1) 
        {
            echo 'Message: ' . $ex1->getMessage();
        }
    

    当我抛出第一个异常时,结果为空!!而且我在处理它的时候无法得到消息!但由于某种原因,如果我去掉重音,它会正确地抛出消息。

    可能是什么?一只虫子?(如果你不相信我,你自己试试)

    2 回复  |  直到 10 年前
        1
  •  3
  •   John Conde    10 年前

    它起作用: http://codepad.viper-7.com/MDs4NB 。您缺少echo语句,无法打印字符串和错误消息:

    try 
    {
        throw new Exception('Debes iniciar sesión para esto.', 1); // This is a null exception.
        throw new Exception('Debes iniciar sesion para esto.', 1); // This is not a null exception.
    }
    catch (Exception $ex1) 
    {
        echo 'Message: ' . $ex1->getMessage();
    }
    
        2
  •  1
  •   Edgar Alexander    10 年前

    糟糕的是,这与PHP无关,正如John Conde所说,问题是我忘记了使用json_encode,只有一个例外,而json_encore不喜欢非utf8字符,所以我有这样的想法:

    try 
    
    {
    
     throw new Exception('Debes iniciar sesión para esto.', 1);
    
    }
    
    catch (Exception $ex1) 
    
    {
    
     echo json_encode(array('message' => $ex1->getMessage()));
    
    }
    

    因此,当json_encode检测到非utf8数据时,它将返回NULL,因此为了解决这个问题,我们必须在获取json之前将数据显式编码为utf8:

    json_encode(array('message' => utf8_encode('Canción.')));
    

    结果将生成一个JSON,其中包含格式化的十六进制字符(即\x00)及其各自的ASCII代码。很抱歉告诉我这是PHP问题,而这是我的错。然而,我会接受约翰的回答,因为他回答正确,他值得称赞,但我也会留下我的答案来提供问题的真正原因。