Como eu sirvo XHTML ao Internet Explorer sem interromper o Chrome?

8

Eu corro um fórum que serve suas páginas como XHTML + MathML + SVG; na íntegra:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg-flat.dtd">

Usando o plug-in MathPlayer, os usuários do Internet Explorer podem usar este site. No entanto, às vezes alguém está usando o fórum do IE e não pode instalar o MathPlayer (talvez esteja em uma máquina pública em algum lugar). Então o IE (pelo menos 6 e 7) reclama do XHTML e oferece apenas o download do arquivo.

Li no site w3c como contornar isso usando uma transformação XSL ( http://www.w3.org/MarkUp/2004/xhtml-faq#ie ). Quando coloquei isso em prática, descobri que o Chrome agora estava reclamando intensamente de entidades indefinidas (a específica era, &nbsp;mas os testes mostram que isso não é relevante).

Estranhamente, posso contornar isso declarando manualmente as entidades no DOCTYPE:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg-flat.dtd" [
<!ENTITY nbsp "&#160;">
]>

mas prefiro não fazer isso para toda a gama de entidades possível. Digo "bizarramente" porque o dtd XHTML + MathML + SVG, até onde posso ver, declara essas entidades. Então, de alguma forma, essas coisas estão sendo perdidas.

Existe uma maneira de contornar este problema? Posso servir XHTML com entidades para o IE?

Caso isso importe, as páginas são geradas por um script php e são veiculadas via apache; portanto, se houver um método confiável de farejar o navegador e modificar o início do documento (apenas enviar o <?xml-stylesheet ...>bit para o IE), isso seria um alternativa aceitável.

(Espero ter o site SE correto ... por favor, deixe-me saber se estou no lugar errado. Idem com as tags.)

Andrew Stacey
fonte
As perguntas HTML / CSS puras (X) pertencem ao stackoverflow.com, mas as suas não são tão diretas, como você mencionou uma possível solução do lado do servidor, por isso não estou sinalizando a mudança. Se você não obtiver nenhuma resposta aqui, eu a excluiria e a colocaria lá. Algumas questões HTML tendem a ser respondidas em segundos!
paulmorriss
@paulmoriss: Obrigado pelo esclarecimento (parcial!). Às vezes, no pântano de locais SE eu fico um pouco perdido ...
Andrew Stacey
Relendo o meu comentário, posso não ser muito claro. Quero dizer "se eu fosse você, eu o excluiria ...". Você decide.
paulmorriss
@paulmoriss: é um problema de configuração no servidor, pois trata-se de lidar com um navegador que não pode lidar com XHTML e como enviar a eles algo com o qual eles possam lidar. Analisando a lista de perguntas "relacionadas", parece haver muitas idéias semelhantes. Mas não sei qual é o escopo deste site (e quanto mais leio, mais confuso fico) e não tenho respostas, por isso seguirei seu conselho (daqui a pouco).
Andrew Stacey

Respostas:

1

Se existe um método confiável de farejar o navegador e modificar o início do documento (portanto, apenas enviar o bit para o IE), isso seria uma alternativa aceitável.

Esta instrução PHP corresponderá a qualquer navegador que inclua "MSIE" na cadeia do agente do usuário e você poderá refinar os critérios adicionando um número de versão, se desejar:

$flag_is_ie = (false !== strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE'));

... com números de versão:

$flag_is_ie = (false !== strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.'));
$flag_is_ie = ( $flag_is_ie || (false !== strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.')));
danlefree
fonte