我在通过 json_encode 将日语字符从 PHP 传输到 JavaScript 时遇到问题。
这是从 csv 文件读取的原始数据。
PRODUCT1,QA,テスト
PRODUCT2,QA,aテスト
PRODUCT3,QA,1テスト
问题是,当通过 echo json_encode($return_value) 传递这些数据时,其中 $return_value 是包含上述数据的二维数组,日语单词“テsuto”被删除并在 ajax 响应端显示为空字符串。但是,如果我在日语单词的开头放置任何字母/数字字符,例如“aテsuto”或“1テsuto”,它们是上面示例的第二行和第三行,那么这些单词就可以顺利通过。
下面是 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.
}
});
非常感谢您提前的帮助!