【问题标题】:Encode Array to UTF-8 and get values to an input text将数组编码为 UTF-8 并获取输入文本的值
【发布时间】:2014-01-09 20:33:06
【问题描述】:

我有一个小问题,基于几个例子,我设法使用 Ajax 将数据从一个文件获取到另一个文件,在我的查询中使用 echo,但现在我想使用 json_ecode();但由于某种原因不起作用,我希望有人能解释我做错了什么,并希望提供一个例子。

这就是我得到的:

文件:query.php

// include your config file or not.. depends on how you do it, I like to always have a config file to connect to a DB or anything else...    
if(isset($_GET['valrq'])) {
// Clean the request
// transform the value to an int // maybe to much cleaning....
// Do the SQL Query
// if Value exist in DB
// Get values in array
// lets make it clean array, because we don't want all of the columns in the db just a few
   $arr = array (
        'location' => $locationdb,
        'city' => $citydb,
        'state' => $statedb,
);
$result['keys'] = array_map("utf8_encode", $arr);
// lets "print" the array
echo json_encode($result);

} else {
  $err='Zip Code is not valid';
 }

这将输出如下数组:

{"keys":{"location":"Sn. Barnabas","city":"Oxon hill","state":"MD"}}

诅咒网址是这样的:.com/query.php?valrq=20745

20745 是一个邮政编码,我想你已经知道这是怎么回事了……

到目前为止,一切都“正常”

现在这是我提出第一个帮助请求的地方..

我拥有的数据库是一个转储,它包含邮政编码城市和州的基金,但其中一些值带有重音字母,例如 [ó, é, í, ñ, Ñ...] 其他一些外观就像一个俄语字符...所以起初我认为我可以一个一个地更改为 ASCII 码,但是.. 有超过 60K 的记录所以没有办法,然后对于那个特定的列,我将它从 utf8_general_ci 更改为 utf8_unicode_ci但这只会让事情变得更糟……为什么? ...

如果我在数据库中的值是 á 也就是 á 那么没有问题,一切都会好起来的,但实际值是一个原始符号 o 重音字母为 á 或 æ ...现在它显示类似

{"keys":{"location":"Sn.B*\u00c1l*rnabas","city":"Oxon hill","state":"MD"}}

那么我怎样才能获得我在 SQL 中的实际符号或重音字母...?

现在我的第二个问题...根据我所拥有的,如果我不使用 json_encode 或 print_r 或任何数组,而不是数组,我使用和 echo 显示信息,例如 echo $citydb;回声 $statedb; ...等等然后我得到类似的东西

锡。 BarnabasOxon hillMD

这可以通过 br 的 echo $val.br 修复;作为回报,我得到

Sn. Barnabas
Oxon hill
MD

无论如何,奇怪的是,通过使用这种方法,我确实得到了符号和重音字母没有问题......

所以我的html和“ajax”如下:

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Test Ajax Fetch SQL Data</title>
</head>
<body>
<form method="post" action="">
    <input type="text" name="zipcode" id="zipcode">
    <input type="text" name="city" id="city">
    <input type="text" name="state" id="state">
</form> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">

$('#zipcode').keyup(function () {
    var zp = $(this);
    if (zp.val().length == 5) {
        $.ajax({
            url: 'query.php',
            cache: false,
            type: "GET",
            data: "valrq=" + zp.val(),
            success: function (data) {
                if(data.status) {
                    $('#city').val(data.keys.city);
                }
            }
        })
    }
});
</script>
</body>
</html>

使用该代码我什么都没有...但是如果我将 json_encode 更改为只是回显,那么我确实可以在我需要的地方获得信息...

我所要做的就是替换这一行

if(data.status) {
$('#city').val(data.keys.city);
}

$('#city').val(data);

只是这样,我将数据输入到我的输入字段问题是不仅仅是任何数据,而是整个事情

所以你可以看到我有两个问题...... 1.- 数据库中的字符集,如果字符具有 í 或 â 或其中任何一个,则数组在值中返回 null ... 2.- 一旦我有了数组,我就需要这些值,这样我就可以把这些值放在我的输入框中。

我什至尝试了 SET CHARACTER SET utf8 但它没有做任何事情......

感谢您抽出宝贵时间...


编辑 - 添加信息。 对于编码部分 UTF-8

Table 1
col 1 | col 2 | col 3
ó     | &oacute | o

echo $col1;
return ó
echo json_encode($col1);
return \90si\ (more or less) ...

无论如何,不​​再需要编码部分,原因是,当我使用 Json_encode();我得到的符号和十六进制不是存储在数据库中的实际数据,所以我使用 print_r() 这样我就不必担心编码为 utf-8 或 ISO ... 所以我的预览数组是这样的:

{"keys":{"location":"Sn. Barnabas","city":"Oxon hill","state":"MD"}}

现在是这样的:

Array
(
    [location] => Sn. Barnabas
    [city] => Oxon Hill
    [state] => MD
)

该数组在“query.php”中 现在我想要实现的是获取这些值并将它们用作它们在 form.php 中的输入框的值,html 仍然与上面相同,但对 ajax 进行了微小的更改......

$('#zipcode').keyup(function () {
    var zp = j(this);
    if (zp.val().length == 5) {
        $.ajax({
            url: 'query.php',
            cache: false,
            type: "GET",
            data: "valrq" + zp.val(),
            success: function (data) {

         $('#city').val(data);

            }
        })
    }
});

我得到的就是全部,我的意思是从 query.php 返回的任何东西都是我的“数据”......我需要的是获取每个键的实际值

> $('#location').val(data.location);
> $('#state').val(data.state);
> $('#city').val(data.city);

但不工作...

【问题讨论】:

  • 真的很难理解你在问什么,举一个有问题的行的具体例子:数据库中存储了什么,echo 返回什么,json_encode 返回什么?还显示 SHOW VARIABLES LIKE 'character_set%' 返回的内容
  • 你好@Dr.Molle 我只是在最后添加了一些代码,我希望更简单,我还更改了我的数组的输出,在我使用 json_encode 之前,现在只需 print_r() ...谢谢。
  • 我没有看到任何问题,"Sn. B\u00c1lrnabas""Sn. BÁlrnabas" 的有效 JSON 编码。当您在 JavaScript 中读取此值时,引擎会自动将转义序列转换为字符,如下所示:jsfiddle.net/DRm99
  • \90si\ ...这真的是 json_encode 返回的吗?
  • 我明白了,我很担心整个 utf-8 和 ISO 以及 utf8_encode ......我直接去 .com/query.php?valrq=222 并且我得到了那个\ u00c1l 结果是错误的,问题是我从来没有得到实际 html 文件中的值......无论如何,我不再需要它了,我需要的是获得这些值......和是的@Dr.Molle json_encode() 返回那个 \u00c1l ... 因为我有它 $return['keys'] = $array_map('utf8_encode', $arr);但现在不再需要知道如何获得这些值...谢谢。

标签: php jquery mysql ajax arrays


【解决方案1】:

你不需要做任何事情。只需正常使用json_encode()。诸如\u00c1 之类的序列是正确的并且是可以预期的。 JavaScript 引擎会自动将它们转换为相应的字符。

// value returned by AJAX request
var data = {"keys":{"city":"test \u00f3 \u00e9 \u00ed \u00f1"}};

$('#city').val(data.keys.city);

有关输出,请参阅 http://jsfiddle.net/zpjD6/

别忘了告诉 jQuery 你期待 JSON:

$.ajax({
    ...
    dataType: 'json',
    ...
});

【讨论】:

  • 你要告诉我的是……当橘子在我手上时,我四处寻找橘子,而我唯一需要的就是一把刀(dataType: 'json ',) 来剪掉它……燃烧吧! ...大声笑天哪,我编码了 SQL 查询,我编码了数组,我打印它,我 json 和编码,几个小时后,我唯一需要的就是告诉 jQuery 我期待什么类型的数据 [DATATYPE!! !!] 谢谢...现在正在工作!
猜你喜欢
  • 1970-01-01
  • 2016-02-12
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多