我的功能只是用实体名称替换其中两个字符?

My function is only replacing two of the characters with their entity name?

我不明白为什么函数只用它们各自的实体名称替换我的“&”和“””。

有人可以阅读它并看看他们是否可以帮助我吗?

function convertHTML(str) {


  var HTML = ['&', '<', '>', '"', '''];

  for(let i=0; i< str.length; i++) {
    if(str[i] == '&') {
      return str.replace('&', HTML[0]);
    }
    if(str[i] == "<") {
      return str.replace("<", HTML[1]);
    }
    if(str[i] == '>') {
      return str.replace('>', HTML[2]);
    }
    if (str[i] == '"') {
      return str.replace('"', HTML[3]);
    }
    if(str[i] == "'") {
      return str.replace("'", HTML[4]);
    }
  }
  return str;
}

convertHTML("Dolce & Gabbana");

为了使您的代码正常工作,您需要删除每个 if 语句中的 return(请注意,我克隆了该字符串,因为您在其上循环并且 str.length 将在每次替换后不断变化)

function convertHTML(str) {
  var HTML = ['&amp;', '&lt;', '&gt;', '&quot;', '&apos;'];
  // clone input string
  let result = str.slice(0);

  for(let i=0; i< str.length; i++) {
    if(str[i] == '&') {
      result = result.replace('&', HTML[0]);
    }
    if(str[i] == "<") {
      result = result.replace("<", HTML[1]);
    }
    if(str[i] == '>') {
      result = result.replace('>', HTML[2]);
    }
    if (str[i] == '"') {
      result = result.replace('"', HTML[3]);
    }
    if(str[i] == "'") {
      result = result.replace("'", HTML[4]);
    }
  }
  
  return result;
}

const result = convertHTML("Dolce & Gabbana ' and < yes ");
console.log('result => ', result);

另一种方法是定义查找和替换数组并使用 RegExp 替换所有出现的

function convertHTML(str) {
  const replace = ['&amp;', '&lt;', '&gt;', '&quot;', '&apos;'];
  const lookup = ['&', '<', '>', '"', '\''];
  lookup.forEach((item, index) => {
    const regEx = new RegExp(item);
    str = str.replace(regEx, replace[index]);
  });
  return str;
}

const result = convertHTML("Dolce & Gabbana ' and < yes ");
console.log('result => ', result);