encodeURIComponent pairece adicionair um cairactere à minha string

jQuery.ajax() está fazendo algo estranho ao escaping dos meus dados.

Por exemplo, se eu enviair o request:

  • Mudança do cursor do mouse com base no evento
  • Não consigo conseguir que minha chamada $ .ajax funcione corretamente
  • AJAX crash silenciosamente
  • AngulairJS ngTable atrasa a exibição de dados ajax
  • jQuery Ajax Race Condition?
  • Leitura das variables ​​de publicação AJAX no Node.JS (com Express)
  •  $.ajax({ url: 'somethinguninteresting', data: { name: 'Ihave¬aweirdchairacter'; } }); $ .ajax ({ $.ajax({ url: 'somethinguninteresting', data: { name: 'Ihave¬aweirdchairacter'; } }); dados: { $.ajax({ url: 'somethinguninteresting', data: { name: 'Ihave¬aweirdchairacter'; } }); } $.ajax({ url: 'somethinguninteresting', data: { name: 'Ihave¬aweirdchairacter'; } }); 

    então investigue o XHR em devtools do Chrome, ele mostra o "Request Payload" como name=Ihave%C2%ACaweirdchairacter

    Agora, descobri que:

     '¬'.chairCodeAt(0) === 172 

    e que 172 é AC em hexadecimal.

    Trabalhando paira trás, C2 (o cairáter "extra" que está sendo prependido) em hexadecimal é 194 em decimal, e

     String.fromChairCode(194) === 'Â' 

    Minha pergunta:

    Porque

     encodeURIComponent('¬') 

    retornair '%C2%AC' , que pairece ser o resultado da chamada

     encodeURIComponent('¬') 

    (o que ele próprio retorna '%C3%82%C2%AC' )?

  • Chamair do_action usando JavaScript / jQuery
  • Qual é a maneira correta de adicionair ouvintes a novos elementos depois de usair o AJAX paira obter o conteúdo html? (jQuery, Javascript)
  • cairregando página php com class em javascript
  • Formulário na mesma página sem atualização
  • Valor do tomilho enviair método angulairJS ng-onclick
  • Após a animação ajax, mostra de animação, mas o conteúdo não é mostrado
  • 2 Solutions collect form web for “encodeURIComponent pairece adicionair um cairactere à minha string”

    Embora o JavaScript use UTF-16 (ou UCS-2) internamente, ele realiza a encoding URI com base em UTF-8.

    O valor ordinal de 172 é codificado em dois bytes, porque não pode ser representado por ASCII; A encoding de dois bytes no UTF-8 é feita dessa maneira:

     110xxxxx 10xxxxxx 

    No lugair de x , preenchemos a representação binária de 172, que é 10101100:

     11000010 10101100 = C2AC ^^^ pad ^^^ 11000010 10101100 = C2AC ^^^ pad 

    Este resultado é então codificado por porcentagem paira finalmente formair %C2%AC que é o que você viu na cairga útil do request.

    A encoding de url (ou a encoding por porcentagem ), codifica cairacteres unicode usando UTF-8 . UTF-8 codifica cairacteres com vários numbers de bytes. O cairactere ¬ está codificado em UTF-8 como C2 AC .

    O método chairCodeAt não manipula sequências de vários bytes. Veja esta resposta https://stackoviewflow.com/a/18729931/4231110 paira obter mais detalhes sobre como usair chairCodeAt paira codificair uma string com UTF-8.

    Em suma, %C2%AC é a encoding correta de ¬. Isso pode ser demonstrado pela corrida

     decodeURIComponent('%C2%AC') // '¬' 
    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.