JS 字符串连接编码问题
JS String concatenate encoding issue
我有两个 html 数据列表,我得到它们的输入值来查询 json 文件。我首先搜索我的 json 文件的关键字是大学专业,它们的值是它们的课程。因此,一旦对象键等于程序,我就 return 该元素,因为我想使用第二个输入字段(课程编号)进一步查询该元素。此步骤总是成功地return输入与程序输入对应的正确程序课程。
第二步是事情变坏的地方。我现在想获取该程序元素并查看该程序中所有课程的名称。我连接两个输入字段,program + " " + course.程序是 "CSE" 或 "I S" 之类的专业,课程是任何 3 位数字,例如“143”或“310”。程序中的每个对象元素都有一个字符串名称属性,如 "CSE 143"。此名称属性不等于 program + " " + course 即使它们都是字符串类型并且在我查看其中包含 space 的程序时具有相同的值。比如我要查找课程"I S 310"。我成功搜索了等于 "I S" 的程序名称。我遍历键并使用此操作 Object.keys(jsondata[index]) == 程序找到正确的元素值。 program 是一个包含字符串 "I S" 的变量。如前所述,这是成功的,但如果我遍历该 objectkey 值的子项以查找 id,如 programdata[index].children == program + " " + course,它不起作用。如果我改为对值进行硬编码,programdata[index].children == "I S 310",它会起作用!这让我相信这两个变量的连接操作会改变字符串的编码。根据console.log,"I S 310"的类型和program + " " + course 都是String,只不过输出的是不同的encodeURIComponent()。
我会写下控制台的输出,因为我的信誉不够好:
第 1 步
function getProgramCourses(data, program) {
var programKeys = Object.keys(data);
for (var i = 0; i < programKeys.length; i++) {
if (Object.keys(data[i]) == program) {
return data[i][Object.keys(data[i])];
}
}
return objs
}
program = "CSE"
console.log(program)
console.log(encodeURIComponent(program));
输出:
CSE
CSE
program = "I S"
console.log(program)
console.log(encodeURIComponent(program));
输出:
我 S
我%C2%A0S
那些未编码的隐藏字符不会影响查找 "I S" 程序提供的课程的第一步。现在,当我想在 "I S" 程序中查找特定课程时,例如 "I S 310":
第 2 步
//data is object array of all courses in this program
function getCourse(data, program, course) {
pc = program + " " course;
for (var i = 0; i < data.length; i++) {
if (data[i].name == pc) {
return data[i];
}
}
}
"CSE" = program and "143" = course
pc = program + " " + course;
console.log(pc)
console.log(encodeURIComponent(pc));
输出:
CSE 142
CSE%20142
["I S" = 程序和“310”= 课程][2]
pc = program + " " + course;
console.log(pc)
console.log(encodeURIComponent(pc));
输出:
我是 310
我%C2%A0S%20310
第二步仅适用于没有 space 的程序,例如 "CSE" 或 "MATH"。不适用于 "A A" 或 "I S"。 data[i].name 是 String 类型,pc 也是。
抱歉 post 太长了,我只是想尽可能地描述一下。任何帮助将不胜感激。
基本上
这是我的问题:
console.log("A A 198")
console.log(encodeURIComponent("A A 198"))
console.log(program + " " + course)
console.log(encodeURIComponent(program + " " + course))
输出:
198
A%20A%20198
一一198
A%C2%A0A%20198
您的程序变量包含一个类似于 space 但不是 space 的字符。确保这不是编码问题,否则您可以使用这个简单的代码来解决这个问题。
encodeURIComponent(program.replace(/\u00a0/g, ' ') + ' ' + course)
我有两个 html 数据列表,我得到它们的输入值来查询 json 文件。我首先搜索我的 json 文件的关键字是大学专业,它们的值是它们的课程。因此,一旦对象键等于程序,我就 return 该元素,因为我想使用第二个输入字段(课程编号)进一步查询该元素。此步骤总是成功地return输入与程序输入对应的正确程序课程。
第二步是事情变坏的地方。我现在想获取该程序元素并查看该程序中所有课程的名称。我连接两个输入字段,program + " " + course.程序是 "CSE" 或 "I S" 之类的专业,课程是任何 3 位数字,例如“143”或“310”。程序中的每个对象元素都有一个字符串名称属性,如 "CSE 143"。此名称属性不等于 program + " " + course 即使它们都是字符串类型并且在我查看其中包含 space 的程序时具有相同的值。比如我要查找课程"I S 310"。我成功搜索了等于 "I S" 的程序名称。我遍历键并使用此操作 Object.keys(jsondata[index]) == 程序找到正确的元素值。 program 是一个包含字符串 "I S" 的变量。如前所述,这是成功的,但如果我遍历该 objectkey 值的子项以查找 id,如 programdata[index].children == program + " " + course,它不起作用。如果我改为对值进行硬编码,programdata[index].children == "I S 310",它会起作用!这让我相信这两个变量的连接操作会改变字符串的编码。根据console.log,"I S 310"的类型和program + " " + course 都是String,只不过输出的是不同的encodeURIComponent()。
我会写下控制台的输出,因为我的信誉不够好:
第 1 步
function getProgramCourses(data, program) {
var programKeys = Object.keys(data);
for (var i = 0; i < programKeys.length; i++) {
if (Object.keys(data[i]) == program) {
return data[i][Object.keys(data[i])];
}
}
return objs
}
program = "CSE"
console.log(program)
console.log(encodeURIComponent(program));
输出:
CSE
CSE
program = "I S"
console.log(program)
console.log(encodeURIComponent(program));
输出:
我 S
我%C2%A0S
那些未编码的隐藏字符不会影响查找 "I S" 程序提供的课程的第一步。现在,当我想在 "I S" 程序中查找特定课程时,例如 "I S 310":
第 2 步
//data is object array of all courses in this program
function getCourse(data, program, course) {
pc = program + " " course;
for (var i = 0; i < data.length; i++) {
if (data[i].name == pc) {
return data[i];
}
}
}
"CSE" = program and "143" = course
pc = program + " " + course;
console.log(pc)
console.log(encodeURIComponent(pc));
输出:
CSE 142
CSE%20142
["I S" = 程序和“310”= 课程][2]
pc = program + " " + course;
console.log(pc)
console.log(encodeURIComponent(pc));
输出:
我是 310
我%C2%A0S%20310
第二步仅适用于没有 space 的程序,例如 "CSE" 或 "MATH"。不适用于 "A A" 或 "I S"。 data[i].name 是 String 类型,pc 也是。 抱歉 post 太长了,我只是想尽可能地描述一下。任何帮助将不胜感激。
基本上
这是我的问题:
console.log("A A 198")
console.log(encodeURIComponent("A A 198"))
console.log(program + " " + course)
console.log(encodeURIComponent(program + " " + course))
输出:
198
A%20A%20198
一一198
A%C2%A0A%20198
您的程序变量包含一个类似于 space 但不是 space 的字符。确保这不是编码问题,否则您可以使用这个简单的代码来解决这个问题。
encodeURIComponent(program.replace(/\u00a0/g, ' ') + ' ' + course)