incoerência HTML

D X

Membro
Olá!

Queria partilhar connvosco a minha irritação por esta incoerência no HTML:

1. Se enviarem num input hidden o valor " vão receber \"

2. Se enviarem numa textarea (ou num input text, etc..) o valor " vão receber "

Não vejo nenhuma razão para que isto seja assim e perdi horas à procura dum bug gerado por esta disparidade entre o input hidden e restantes elementos de forms. BUH... >(

Se tiverem um servidor a correr PHP experimentem:
(atenção: há código seleccionável até ao fim da pág. que ficou a preto sobre fundo preto (???)
PHP:
<?
if(isset($_POST["a"])){

var_dump($_POST["a"]);
var_dump($_POST["s"]);
}

?>

<form method="post">
<input type="hidden" value="&quot;" name="s">
<textarea name="a">&amp;quot;</textarea>
<input type="submit">

</form>

... Ou será que isto é do servidor (apache 2.0)???
 
Última edição:
D X disse:
(atenção: há código seleccionável até ao fim da pág. que ficou a preto sobre fundo preto (???)
Tambem me aconteceu. Julgo que deve ser da skin, porque com a "bullet proof style" isto não acontece.

D X disse:
Código:
<?
if(isset($_POST["a"])){

var_dump($_POST["a"]);
var_dump($_POST["s"]);
}

?>

<form method="post">
<input type="hidden" value="&quot;" name="s">
<textarea name="a">&quot;</textarea>
<input type="submit">

</form>
E em vez de
Código:
<textarea name="a">&amp;quot;</textarea>
assim:
Código:
<textarea name="a">&quot;</textarea>
continua a acontecer?

Não tenho aqui php por isso nem dá para fazer experiências. Ainda assim, entretém-te a "mastigar" isto: http://www.w3.org/TR/PR-html40-971107/html40.txt :P
 
NoMercy disse:
Tambem me aconteceu. Julgo que deve ser da skin, porque com a "bullet proof style" isto não acontece.


E em vez de
Código:
<textarea name="a">&quot;</textarea>
assim:
Código:
<textarea name="a">&quot;</textarea>
continua a acontecer?

Não tenho aqui php por isso nem dá para fazer experiências. Ainda assim, entretém-te a "mastigar" isto: http://www.w3.org/TR/PR-html40-971107/html40.txt :P
Dentro do hidden o valor atribuido ja está com encoding... por isso te vai o normal ' mas com o BackSlash para protecção do Php... Dentro dos Input Text e TextAreas é o utilizador que insere o código, que quando é enviado é transformado em HTML, logo fica &quot; ...
Isso não é um bug, é assim mesmo, e não tem a ver com o Php ou mesmo Apache mas sim como o browser te manda a informação para o servidor (penso eu de que). Faz o decode que obtens o valor que o user inseriu, masmo como foi inserido.

PS: tenta por um Input Text já com o valor da &quot;, mas literal (') e vê se não te mostra do outro lado o mesmo que o hidden... Depois diz qualquer coisa.
 
Última edição:
@BraBo, o primeiro comentário que fiz era em relação á parte do código dentro da tag de php que não aparece com a skin original mas que fica bem com a skin "bullet proof style"

BraBo disse:
Dentro do hidden o valor atribuido ja está com encoding... por isso te vai o normal ' mas com o BackSlash para protecção do Php... Dentro dos Input Text e TextAreas é o utilizador que insere o código, que quando é enviado é transformado em HTML, logo fica &quot; ...
Isso não é um bug, é assim mesmo, e não tem a ver com o Php ou mesmo Apache mas sim como o browser te manda a informação para o servidor (penso eu de que). Faz o decode que obtens o valor que o user inseriu, masmo como foi inserido.
...
És bem capaz de ter razão. Foi a primeira coisa em que pensei, mas como não tinha a certeza sobre o "processamento" do php, preferi não comentar isso e deixar isso para quem soubesse melhor.
 
NoMercy disse:
@BraBo, o primeiro comentário que fiz era em relação á parte do código dentro da tag de php que não aparece com a skin original mas que fica bem com a skin "bullet proof style"


És bem capaz de ter razão. Foi a primeira coisa em que pensei, mas como não tinha a certeza sobre o "processamento" do php, preferi não comentar isso e deixar isso para quem soubesse melhor.
O Php é processado do lado do servidor. Aquilo que chega ao cliente é qualquer outra coisa (XML, HTML, Imagens ...) ...
 
BraBo disse:
O Php é processado do lado do servidor. Aquilo que chega ao cliente é qualquer outra coisa (XML, HTML, Imagens ...) ...
Eu sei.
O que não sei é o que ocorre quando o servidor recebe dados do cliente e os envia ao php para processar. Por exemplo, usando o módulo CGI.pm (perl), para processar informação que é enviada do browser para o servidor, certos caracteres ou sequência deles é analizada e alterada para protecção do servidor. A mesma coisa poder-se-ia passar (e provavelmente passa-se) com php e é isso que desconheço, ou seja, aquilo que é relativo ao php.
 
Obr BraBo e NoMercy pelas explicações!

Cheguei à conclusão de que neste caso, o hidden torna-se ínutil. Tenho de usar um input text, com <div style="display:none"> antes!!!

Passo a explicar porquê... se interessar a alguém :wow:

O que queria passar como valor do input hidden era um array "serializado" (array depois de passar pela função php serialize). Ora, este array adopta como elemento estruturador as aspas. Se um elemento dum array tem aspas, então o array serializado fica desestruturado.
Por isso queria usar « &quot; » em vez de « " » nos elementos do array.
Só que ao passar no POST o array serializado com « &quot; » e « " » arrumados nos seus lugares, recebo tudo como « \" » e então já não consigo "unserializar" o array para o poder usar.

Com o input text, tá tudo bem. :)
 
na minha opinião, acho essa uma maneira má de mandares um input k n keres k ng veja...

encontrei isto algures por ai:

I was trying to submit a serialized array through a hidden form field using POST and was having a lot of trouble with the quotes. I couldn't figure out a way to escape the quotes in the string so that they'd show up right inside the form, so only the characters up to the firstset of quotes were being sent.

My solution was to base64_encode() the string, put that in the hidden form field, and send that through the POST method. Then I decoded it (using base64_decode()) on the other end. This seemed to solve the problem.

talvez ajude, talvez não...
 
Boa solução

Essa, Nazgulled, parece-me ser uma solução bastante boa! Sem dúvida mais " elegante " do que o meu truque!
Único senão, a codificação e descodificação de strings torna as páginas mais lentas.

Vou pensar se vale a pena modificar o código para adoptar essa solução, neste caso. De qualquer forma, é bom saber que existem alternativas para poder usar o hidden.

Obrigado pessoal !! :009:
 
Back
Topo