我正在尝试显示不同的语言(土耳其语),但我无法显示它,而我可以从我的数据库中看到它的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));
}
}
?>
答案 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不是我的东西,尽管我有一些基本的经验。 :)