Eu tenho uma lista suspensa em uma página da web que está quebrando quando a cadeia de valor contém uma citação.
O valor é "asd
, mas no DOM sempre aparece como uma sequência vazia.
Eu tentei de todas as maneiras que sei escapar da corda corretamente, mas sem sucesso.
<option value=""asd">test</option>
<option value="\"asd">test</option>
<option value=""asd">test</option>
<option value=""asd">test</option>
Como renderizo isso na página para que a mensagem de postagem contenha o valor correto?
htmlentities
.Respostas:
"
é a maneira correta, o terceiro de seus testes:Você pode ver isso funcionando abaixo, ou no jsFiddle .
Como alternativa, você pode delimitar o valor do atributo com aspas simples:
fonte
"
mapeia para o mesmo caractere que"
, mas não há benefício em usar a opção numérica aqui, porque"
é uma entidade nomeada definida."
também é mais fácil de lembrar.&quot;a
(substitua o&
com&
)Se você estiver usando PHP, tente chamar
htmlentities
ouhtmlspecialchars
função.fonte
<option value='<?php echo htmlentities("' onmouseover='alert(123);' foo='"); ?>' />
- certifique-se de usá-lo com ENT_QUOTES, isso é seguro:<option value='<?php echo htmlentities("' onmouseover='alert(123);' foo='", ENT_QUOTES); ?>' />
mas, além de ENT_QUOTES, você também deve adicionar ENT_SUBSTITUTE e ENT_DISALLOWED, pessoalmente, eu uso esse invólucro há anos:function hhb_tohtml(string $str):string { return htmlentities($str, ENT_QUOTES | ENT_HTML401 | ENT_SUBSTITUTE | ENT_DISALLOWED, 'UTF-8', true); }
Por sintaxe HTML e até HTML5 , todas as opções a seguir são válidas:
Observe que se você estiver usando a sintaxe XML, as aspas (simples ou duplas) serão necessárias.
Aqui está um jsfiddle mostrando todo o trabalho acima .
fonte
Outra opção é substituir aspas duplas por aspas simples, se você não se importa. Mas eu não mencionei este:
Menciono este:
No meu caso, usei esta solução.
fonte
Se você estiver usando Javascript e Lodash, poderá usar _.escape (), que escapa ", ', <,> e &.
Veja aqui: https://lodash.com/docs/#escape
fonte
Você realmente só deve permitir dados não confiáveis em uma lista de permissões de bons atributos como: alinhar, alink, alt, bgcolor, borda, cellpadding, cellpacing, classe, cor, colunas, colspan, cordas, dir, face, altura, hspace, ismap, lang , marginheight, marginwidth, multiple, nohref, noresize, noshade, nowrap, ref, rel, rev, linhas, tablespan, rolagem, forma, extensão, resumo, tabindex, title, usemap, valign, value, vlink, vspace, width
Você realmente deseja manter os dados não confiáveis fora dos manipuladores javascript, bem como dos atributos id ou name (eles podem prejudicar outros elementos no DOM).
Além disso, se você estiver colocando dados não confiáveis em um atributo SRC ou HREF, é realmente um URL não confiável; portanto, para validar o URL, verifique se NÃO é um javascript: URL e, em seguida, codifique a entidade HTML.
Mais detalhes sobre tudo aqui: https://www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet
fonte
Não há como escapar de aspas no valor de um texto de entrada ... mas você pode usar javascript (ou jquery):
fonte