1

嗨,我正在寻求帮助,因为我已经做了很多事情来正确显示数据库中的数据。我有一个设备,它在 PHP 脚本的帮助下将数据插入 MySQL 数据库。所有数据都正确显示,但特殊数据(Ñ、ó、é 等...)。我在服务器和设备之间使用 JSON。我做了很多改变,这些都是我得到的。首先它只显示一个“?” 而不是字符 (I?aki)。后来它显示整个字段为空,最后它没有显示任何特殊字符被写入。我做了以下更改,但没有成功: 在 PHP 脚本中:

header("Content-Type: text/html;charset=utf-8");
mysql_query("SET NAMES 'utf8'");

此外,在数据库中,字符串字段位于 utf8_spanish_ci 中,表排序规则位于 utf_unicode_ci 中。

我不知道我还能做什么。如果我在数据库中插入一个新行,我可以在 phpmyadmin 和我的设备中完美地看到它。当设备将参数发送到服务器时会发生上述问题,并且我认为 php 脚本不理解特殊字符。

编辑:这是上面解释的 PHP 脚本的代码:

<?php

header("Content-Type: text/html;charset=utf-8");

// array for JSON response
$response = array();

// check for required fields
if (isset($_POST['nserie']) && isset($_POST['dni']) && isset($_POST['nombre']) && isset($_POST['bateria'])) {

    $nserie = $_POST['nserie'];
    $dni = $_POST['dni'];
    $nombre = $_POST['nombre'];
    $bateria = $_POST['bateria'];

    // include db connect class
    require_once __DIR__ . '/db_connect.php';

    // connecting to db
    $db = new DB_CONNECT();

    // mysql inserting a new row

    $result = mysql_query("INSERT INTO candidatos(nserie, dni, nombre, bateria) VALUES('$nserie', '$dni', '$nombre', '$bateria')");
    $insertedId = mysql_insert_id();



    // check if row inserted or not
    if ($result) {
        // successfully inserted into database
        $response["success"] = 1;
        $response["message"] = $nombre;
        $response["id"] = mysql_insert_id();

        // echoing JSON response
        echo json_encode($response);

    } else {
        // failed to insert row
        $response["success"] = 0;
        $response["message"] = "Oops! An error occurred.";

        // echoing JSON response
        echo json_encode($response);
        echo json_last_error();
    }
} else {
    // required field is missing
    $response["success"] = 0;
    $response["message"] = "Required field(s) is missing";

    // echoing JSON response
    echo json_encode($response);
}
?>

谢谢

已解决:终于得到了解决方法,错误出在Android应用中,没有设置utf-8。这是更改:

DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));

感谢阿特里的解释

4

1 回答 1

4

PHP 根本不处理 UTF-8。就它而言,UTF-8 字符串只是普通的字节字符串,就像它处理的任何其他数据字符串一样。这不是问题,只要您不使用不知道如何在内部处理 UTF-8 的 PHP 函数弄乱字符串。

因此,如果您的设备正在向 PHP 发送一个有效的 UTF-8 字符串,而 PHP 只是将所述字符串传递给 MySQL,那么您就可以了。但是,如果您htmlentities在将其插入 MySQL 之前使用了类似的东西——并且没有正确设置函数的 charset 参数——那么你就有麻烦了。- 因此,如果没有看到该代码,我无法真正判断 PHP 脚本是否弄乱了数据。

多年来在开发支持 Unicode 的网站时,我多次注意到一件事:如果在 phpMyAdmin 中看起来正确,则 UTF-8 值是错误的。除非最近更新以支持它,否则 phpMyAdmin 不使用 UTF-8;只有拉丁语1。我不相信你在那里看到的。- 您可以通过手动设置浏览器使用的字符集来强制它显示正确的值。(虽然不是 100% 确定这一点。)

我不明白的一件事。为什么将内容类型设置为text/html?你不是说通信是通过JSON完成的吗?或者您可能在通过 PHP 被设备插入后查看网站上的数据?如果是这样,您需要确保<meta>在 HTML 标记中指定内容类型的标记也设置为正确的字符集。如果标记与其相矛盾,则设置 HTTP 标头是不够的。

于 2013-06-23T13:01:19.063 回答