【问题标题】:JS String concatenate encoding issueJS字符串连接编码问题
【发布时间】:2016-06-04 10:14:07
【问题描述】:

我有两个 html 数据列表,我获取它们的输入值来查询一个 json 文件。我首先搜索我的 json 文件的键是大学专业,它们的值是他们的课程。因此,一旦对象键等于程序,我就返回该元素,因为我想使用作为课程编号的第二个输入字段进一步查询该元素。此步骤在返回与程序输入对应的正确程序课程时总是成功的。

第二步是事情变糟的地方。我现在想采用该程序元素并查看该程序中所有课程的名称。我连接两个输入字段,程序+“”+课程。该课程是“CSE”或“IS”等专业,课程是“143”或“310”等任何3位数字。程序中的每个对象元素都有一个字符串名称属性,如“CSE 143”。这个名称属性不等于程序+“”+当然,即使它们都是字符串类型并且值相同,当我正在查看一个包含空格的程序时。例如,我想查找课程“IS 310”。我成功搜索到等于“IS”的程序名称。我遍历键并使用此操作 Object.keys(jsondata[index]) == 程序找到正确的元素值。程序是一个包含字符串“IS”的变量。如前所述,这是成功的,但是如果我遍历该 objectkey 值的子项以查找 id,例如 programdata[index].children == program + " " + 当然,它不起作用。如果我改为硬编码值 programdata[index].children == "I S 310",它可以工作!这让我相信这两个变量的连接操作会改变字符串的编码。根据console.log,“IS 310”和program +“”+ course的类型都是Strings,只是它们输出不同的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
中考


program = "I S"
console.log(program)
console.log(encodeURIComponent(program));

输出:
我是
I%C2%A0S


那些未编码的隐藏字符不会影响查找“IS”程序提供的课程的第一步。现在,当我想在“IS 310”等“IS”计划中找到特定课程时:

第二步

//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));

输出:
I S 310
I%C2%A0S%20310


第二步仅适用于没有空格的程序,如“CSE”或“MATH”。不适用于“A A”或“I S”。 data[i].name 是 String 类型,pc 也是。 很抱歉这篇冗长的帖子,我只是想尽可能地描述一下。任何帮助将不胜感激。

基本上

这是我的问题:

        console.log("A A 198")
        console.log(encodeURIComponent("A A 198"))
        console.log(program + " " + course)
        console.log(encodeURIComponent(program + " " + course))

输出:
A A 198
A%20A%20198

A A 198
A%C2%A0A%20198

not equal

【问题讨论】:

  • 你看过encodeURIComponent(data[i].name)的格式吗?它有任何额外的 Unicode 字符吗?

标签: javascript json string concatenation encodeuricomponent


【解决方案1】:

您的程序变量包含一个类似于空格但不是空格的字符。确保不是编码问题,否则你可以用这个简单的代码解决这个问题。

encodeURIComponent(program.replace(/\u00a0/g, ' ') + ' ' + course)

【讨论】:

  • 你应该明确替换/\u00a0/g,否则没有人会阅读这段代码。
猜你喜欢
  • 1970-01-01
  • 2021-11-04
  • 2015-09-08
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
相关资源
最近更新 更多