代码之家  ›  专栏  ›  技术社区  ›  SPlatten

为什么“,”被翻译成“%2C+”?

  •  -1
  • SPlatten  · 技术社区  · 10 月前

    我正在使用Node.js v21.7.1进行一个项目,从MariaDB数据库中查询名字和姓氏,然后将其返回给客户端。

    在我的SQL中,我使用:

    CONCAT(`t2`.`vcSurName`, ',', `t2`.`vcFirstName`) AS vcName
    

    我的客户端收到这个并将其添加到“SELECT”HTML标记中,我可以看到名称显示正确,例如显示了“Platten,Simon”,这现在是表单的一部分,当提交时,我可以看出服务器收到的名称如下:

    'Platten%2C+Simon'
    

    在我使用过的服务器上:

    var strUserName = decodeURIComponent(objFields['biUID']);
    

    然后,我将名称拆分为一个数组:

    var aryName = strUserName.split(', ');
    

    这就是错误的地方,decodeURIComponent只将%2C翻译回逗号,但aryName的内容现在包含:

    [Platten,+Simon]
    

    我需要做什么,因为+是对空间进行编码的结果,但它没有被解码。。。

    1 回复  |  直到 10 月前
        1
  •  0
  •   BambooleanLogic    10 月前

    decodeURIComponent() 仅处理字符串的百分比编码部分。解码 + 角色需要单独完成。

    另请参阅 Decoding query parameters from a URL MDN的章节 decodeURIComponent() 文章,其中建议使用以下代码:

    function decodeQueryParam(p) {
      return decodeURIComponent(p.replace(/\+/g, " "));
    }
    
    decodeQueryParam("search+query%20%28correct%29");
    // 'search query (correct)'