
HTML para PHP: echo, heredoc, nowdoc e saída do PHP
Cole marcação já pronta e obtém cinco maneiras de a pôr num ficheiro PHP, cada uma com o escape certo. Tudo corre no seu navegador: a marcação nunca é enviada para lado nenhum nem guardada.
.html — o ficheiro é lido localmente.
O mais próximo do que o codebeautify produz, mas com escape: sem ele qualquer apóstrofo na marcação parte a cadeia PHP.
Cole HTML acima — o código PHP aparece aqui.
Cole HTML acima — o código PHP aparece aqui.
Cole HTML acima — o código PHP aparece aqui.
Cole HTML acima — o código PHP aparece aqui.
Cole HTML acima — o código PHP aparece aqui.
A marcação não sai do seu navegador — a conversão corre localmente, sem enviar nada para um servidor.
Cinco maneiras e quando é que cada uma serve
echo linha a linha — linha após linha, cada uma na sua própria chamada. O aspeto mais habitual, prático quando entre as linhas é preciso meter uma condição ou um ciclo. nowdoc — um bloco em que o PHP não interpreta nada: nem sequências de escape nem variáveis. A marcação entra no código byte a byte e não precisa de escape nenhum. É a forma mais segura de transferir HTML alheio. heredoc — o mesmo bloco, mas com variáveis: $title lá dentro é substituído. Por isso o cifrão e a barra invertida são escapados, e as aspas não. Cadeia numa variável — a marcação é reunida em $html por concatenação. É preciso quando há que a devolver de uma função ou passá-la a um motor de modelos em vez de a imprimir logo. Saída do PHP — fechar a etiqueta e entregar a marcação tal como está. É exatamente isto que a documentação do PHP aconselha: nenhum escape, nenhum custo de colar cadeias, e o realce de sintaxe no editor continua a funcionar. A etiqueta de fecho ?> falta de propósito no código gerado. Qualquer carácter depois dela — mesmo uma quebra de linha acidental no fim do ficheiro — vai parar à saída e dá o clássico «headers already sent».
Porque é que os conversores sem escape produzem código que não funciona
O conversor de HTML para PHP mais divulgado faz exatamente uma coisa: corta o texto em linhas e cola echo '<linha>';. Ali não há substituição de carateres nenhuma, e isso vê-se logo no primeiro pedaço real de marcação. Um atributo entre aspas simples — <a href='/price'> — fecha a cadeia PHP a meio do texto. A seguir vem um erro de sintaxe. Uma barra invertida no fim da linha engole as aspas de fecho e cola duas linhas numa. Um cifrão entre aspas duplas ou num heredoc transforma $total num valor vazio. trim() em cada linha corta em silêncio a indentação dentro de pre, textarea e code — na página muda aquilo que o visitante vê. Todas as linhas são coladas sem quebras, por isso o HTML resultante torna-se uma única linha interminável. Aqui cada um destes casos está tratado, e o rótulo do heredoc é escolhido de forma a não coincidir com nenhuma linha da sua marcação: caso contrário o bloco fechar-se-ia a meio.
