从PHP传递变量到js时出错

27 浏览
0 Comments

从PHP传递变量到js时出错

我正在使用json_encode($data)将一个数据数组进行编码,其中一个字段包含俄文字母。

我使用mb_detect_encoding()来显示该字段的编码,显示为UTF-8。

我认为json编码失败是因为其中有一些坏字符,比如"ра▒"。我尝试了很多方法,比如在数据上使用utf8_encode,这样可以绕过错误,但数据看起来不正确。

对于这个问题应该怎么处理?

0
0 Comments

错误的原因是字符串中包含了一些无效的UTF-8字符,导致传递变量从PHP到JavaScript时出现错误。解决方法是使用PHP的json_encode函数,并传递JSON_INVALID_UTF8_IGNORE或JSON_INVALID_UTF8_SUBSTITUTE选项来处理无效的UTF-8字符。

在PHP 7.2中,可以使用以下代码来处理无效的UTF-8字符:

json_encode($text, JSON_INVALID_UTF8_IGNORE);

或者

json_encode($text, JSON_INVALID_UTF8_SUBSTITUTE);

这些选项可以直接在json_encode函数中使用,以处理无效的UTF-8字符。

感谢上面的方法,这对我有用,因为我的API响应中的标题字符串中包含了一些表情符号。但是我有一个疑问,我在某处看到表情符号是UTF-8字符,那为什么字符串中的表情符号会导致这个错误呢?也许有些表情符号是有效的UTF-8字符,而其他一些不是...

0
0 Comments

问题的出现原因是在将PHP变量传递给JavaScript时出现错误。错误是由于多维数组在JSON格式中的编码问题引起的。为解决这个问题,可以使用下面的方法:

1. 首先,使用以下代码将数组编码为JSON格式:

$encoded = json_encode(utf8ize($responseForJS));

2. 然后,使用以下递归函数来编码数组数据:

function utf8ize($mixed) {
    if (is_array($mixed)) {
        foreach ($mixed as $key => $value) {
            $mixed[$key] = utf8ize($value);
        }
    } elseif (is_string($mixed)) {
        return mb_convert_encoding($mixed, "UTF-8", "UTF-8");
    }
    return $mixed;
}

3. 如果你运行的是PHP 7.2或更高版本,则不需要使用上述的utf8ize函数。只需使用以下代码即可:

json_encode(mb_convert_encoding($responseForJS, "UTF-8", "UTF-8"));

需要注意的是,mb_convert_encoding函数只能在PHP 7.2或更高版本中转换数组。否则,可以使用上述的utf8ize函数。

通过以上的解决方法,你可以成功地将PHP变量传递给JavaScript,并避免出现错误。

0
0 Comments

问题的出现原因是在变量中存在一些非UTF-8字符,即使大部分字符都是UTF-8字符。通过使用mb_convert_encoding()函数将变量转换为UTF-8编码,可以解决这个问题。同时,可以使用$mysqli->set_charset("utf8")来设置数据库连接的字符集。

作者尝试通过添加以下代码来查找无效的字符串:

foreach ($addresses as $address) {
    $converted = mb_convert_encoding($address, 'UTF-8', 'UTF-8');
    if ($converted !== $address) {
        dd($addresses);
    }
}

作者发现$converted !== $address条件从未满足。这可能是因为===是一个"二进制安全"操作符。作者还发现即使从未将$converted赋值给任何变量,最终也没有报错。这就像mb_convert_encoding()函数按引用接受了字符串,尽管实际上并没有。

有趣的是,由于糟糕的编码,mb_check_encoding()json_decode()两个函数都无法正常工作。而mb_detect_encoding()却可以。这是因为存在一个UTF-8编码错误的文件的问题。但是经过mb_convert_encoding()之后,一切都按预期工作了。

0