显示不同的语言问题

时间:2013-10-16 10:47:30

标签: php html json

我正在尝试显示不同的语言(土耳其语),但我无法显示它,而我可以从我的数据库中看到它的HTML但我无法显示当我回应土耳其人字符çğıöş它显示像PHP中的§❢₳。。虽然该文件应保留在PHP中,因为我在iOS中使用它。那么请问我的问题在哪里?

<?php
$connection = mysql_connect($host, $user, $pass);

$queryA = '';
$decision = $_GET['x'];
$ilParam = $_GET['y'];


$ilSecim = 0;
$ilceSecim = 1;


//Check to see if we can connect to the server
if(!$connection)
{
    die("Database server connection failed.");  
}
else
{

//Attempt to select the database
        $dbconnect = mysql_select_db($db, $connection);

        //Check to see if we could select the database
        if(!$dbconnect)
        {
            die("Unable to connect to the specified database!");
        }
        else
        {          
      if($decision == $ilSecim)
        $queryA = "SELECT distinct city FROM places";

            $resultset = mysql_query($queryA, $connection);

            $records = array();

            //Loop through all our records and add them to our array
            while($r = mysql_fetch_assoc($resultset))
            {
                $records[] = $r;
            }

            //Output the data as JSON
            echo utf8_decode(json_encode($records));
        }
 }
?>

2 个答案:

答案 0 :(得分:0)

http://www.happycode.info/php-json-response/中的简单实现 我会在这里发布,以防它消失

<?php

/**
* http://www.happycode.info
*/

function jsonResponse($param, $print = false, $header = true) {
    if (is_array($param)) {
        $out = array(
            'success' => true
        );

        if (is_array($param['data'])) {
            $out['data'] = $param['data'];
            unset($param['data']);
            $out = array_merge($out, $param);
        } else {
            $out['data'] = $param;
        }

    } else if (is_bool($param)) {
        $out = array(
            'success' => $param
        );
    } else {
        $out = array(
            'success' => false,
            'errors' => array(
                'reason' => $param
            )
        );
    }

    $out = json_encode($out);

    if ($print) {
        if ($header) header('Content-type: application/json');

        echo $out;
        return;
    }

    return $out;
}

?>

参数:

$ PARAM 要输出的数组或字符串。

$打印 是否应打印或返回输出。默认行为是返回。

$头 是否应该发送内容类型标题。默认行为是发送。

示例1

$response = array(
    array('id' => '1', 'name' => 'some name 1', 'created' => '2010-06-29 11:41:27', 'editable' => '1'),
    array('id' => '2', 'name' => 'some name 2', 'created' => '2010-07-07 16:47:03', 'editable' => '1'),
    array('id' => '3', 'name' => 'some name 3', 'created' => '2010-08-30 09:23:38', 'editable' => '1')
);
die(jsonResponse($response));

输出

{
    "success":true,
    "data":[
        {"id":"1","name":"some name 1","created":"2010-06-29 11:41:27","editable":"1"},
        {"id":"2","name":"some name 2","created":"2010-07-07 16:47:03","editable":"0"},
        {"id":"3","name":"some name 3","created":"2010-08-30 09:23:38","editable":"0"}
    ]
}

示例2 返回错误

$error = 'Operation not permitted.';
die(jsonResponse($error));

输出

{
    "success":false,
    "errors":{
        "reason": "Operation not permitted."
    }
}

这样你可以通过打印或不从第二个参数进行测试。

答案 1 :(得分:0)

通常,在提取数据库的数据时,特殊字符是否保持良好取决于字符编码。

什么是字符编码

想象一下将字符编码作为一个大表,其中每个字符都有他的数字表示 - 例如:

A = 1
B = 2
C = 3
..et cetera..

根据不同的文化和需求,有许多不同的编码表,一个是US-ASCII,另一个例如是utf8或utf8_czech,或者utf16,它们各自给出不同的字符不同的数值(通常在不同的数字系统中)像十六进制等。)

说明

现在想象一下,你有一种编码在一种编码中的文本,它存储在表格的数据库中。您创建了一个数据库连接,它不知道表/列的字符编码,并且因为没有告诉它使用什么字符编码,所以它使用了默认编码连接。

现在您使用查询从表中提取数据并读取它们,但由于数据库连接不知道正确的编码,因此它使用的是默认编码,它接近您使用的编码,但不是足够接近。

因为当它从数据库读取字符代码时,它会根据它的默认字符编码读取它们并赋予它们不同的含义 - 从ç变成§等等......

解决方案

基本上,您需要做的是指定数据库连接的字符编码。这是通过添加mysql_set_charset函数;

来完成的
mysql_set_charset("charset_name_you_want_to_use",$database_connection_name);

在您的情况下:

mysql_set_charset("charset_name",$connection);

只需将数据库中使用的字符集的名称替换为"charset_name",并将其放在代码中的某个位置,最好在选择数据库之后。

您还应该知道,您正在使用PHP的一部分,可能很快就会弃用,如果您正在使用版本高于5.0的PHP服务器,您应该使用 mysql的其他替代方法函数如 mysqli (两者都与mysql数据库一起工作,mysqli只是一种更新的首选方式)。

P.S。:我试着尽可能准确,但PHP不是我的东西,尽管我有一些基本的经验。 :)