【发布时间】:2011-01-02 03:05:16
【问题描述】:
我在通过 json_encode 将日文字符从 PHP 传输到 JavaScript 时遇到问题。
这是从 csv 文件中读取的原始数据。
PRODUCT1,QA,テスト
PRODUCT2,QA,aテスト
PRODUCT3,QA,1テスト
问题在于,当通过 echo json_encode($return_value) 传递这些数据时,其中 $return_value 是包含上述数据的二维数组,日语单词“テスト”被删除并在 ajax 响应端显示为空字符串.但是,如果我在日语单词的开头放置任何字母/数字字符,例如上述示例的第 2 行和第 3 行的“aテスト”或“1テスト”,这些词就可以通过了。
下面是数据在 ajax 响应端的样子。如您所见,第一个块的第三个元素是空的。如果我从上述原始数据的其他单词中删除“a”或“1”,这些字符在响应端也会变为空。到目前为止,我测试过的任何一种日语字符都会发生这种情况。
[["PRODUCT1","QA",""],["PRODUCT2","QA","a\u30c6\u30b9\u30c8"],["PRODUCT3","QA","1\u30c6\u30b9\u30c8"]]
有人知道为什么会发生这种情况以及我如何克服这个问题吗?
这是双方的部分代码。
PHP:
function getFileContents($dirName,$filename){
$return_value = array();
$my_file= fopen($dirName . $filename, "r");
$row = 0;
while (($data = fgetcsv($my_file, 1000, ",")) !== FALSE) {
$num = count($data);
for ($c=0; $c < $num; $c++) {
#csv file is written in euc-jp so convert to utf-8 here.
$return_value[$row][$c] = mb_convert_encoding($data[$c], "UTF-8", "EUC-JP");
}
$row++;
}
fclose($my_file);
echo json_encode($return_value);
}
JavaScript:
$.ajax({
type: "POST",
url: "data.php",
data: {
"dirName" : "./data/",
"filename" : filename
},
dataType :"json",
success : function(response){
// more code
// At this point, Japanese characters are already empty strings.
}
});
非常感谢您提前提供的帮助!
【问题讨论】:
标签: php utf-8 character-encoding json