Apache HTML页面<;标题>;使用SSI时不解释为UTF-8
为了使我的网站看起来和感觉一致,我大量使用SSI。我的所有页面都有相同的页眉(标题除外)和页脚。这些行为类似于模板,包含在SSI指令中。变量字段内容通过SSI#set variables提供 这是我在没有使用HTML生成器的情况下找到的最接近于“函数”的等价物 标准页面结构如下所示:Apache HTML页面<;标题>;使用SSI时不解释为UTF-8,apache,unicode,character-encoding,echo,ssi,Apache,Unicode,Character Encoding,Echo,Ssi,为了使我的网站看起来和感觉一致,我大量使用SSI。我的所有页面都有相同的页眉(标题除外)和页脚。这些行为类似于模板,包含在SSI指令中。变量字段内容通过SSI#set variables提供 这是我在没有使用HTML生成器的情况下找到的最接近于“函数”的等价物 标准页面结构如下所示: <!--#set var="PageTitle" value="Référence" --> <!--#include virtual="/header.shtml" --> <sec
<!--#set var="PageTitle" value="Référence" -->
<!--#include virtual="/header.shtml" -->
<section>
Specific page content
</section>
<!--#include virtual="/footer.shtml" -->
有没有办法将Apache SSI#echo处理置于“透明”模式下?
Apache手册上说,encoding=
默认为entity
(我得到的结果)。还可以将其设置为URL
,以保护URL免受恶意使用(即%escape)。但是,没有none
设置
当然,作为一种解决方法,我可以在字符串中直接使用字符实体引用,但这不是用户友好的:键入一个可以从键盘访问的字符要舒服得多,并且将目标字符放在屏幕上可以简化校对
编辑:
解决了
解决了,但我不知道它是否“标准”
我尝试在令人不快的#echo
语句中添加encoding=“none”
,一切都很顺利
现在,我必须检查这在不同的Apache版本中是否可用。我添加这个答案,因为上面的答案并不能完全解决我的问题: 确保echo语句使用encoding=“none”--并确保将其设置在var之前而不是之后 出于某种原因,这是可行的:
但这并不是:
缺少垂直条/管道
我还没有读完整页,所以不确定这是否是问题的真正原因,但如果您正在使用它,则需要纠正 如何检查浏览器接收到的HTML?好的老“查看源代码”功能显示实际文本,但任何更高级的功能(尤其是显示DOM树的开发工具)都不会显示。浏览器怎么知道你的文本是UTF-8?你没有提到任何关于HTTP头的事情,我没有提到所有的簿记工作;在站点的“手册”和SSI版本中,一切都是一样的(在页面文本之前显式发送“Content-Type:text/html;charset=utf-8”的HTTP头)。Unicode UTF-8字节序列->实体引用在回送处理期间发生(以保护我免受意外XS攻击)。我想暂时取消此转换。请使用“回答您自己的问题”按钮提供解决方案。否则,答案将无法投票或接受,问题将显示为未回答。我知道,但我的“声誉”不允许我回答自己的问题。我考虑添加新的评论,但决定编辑我的问题。也许你可以复制我的编辑作为解答?您好。您说得对,每个代码段中都缺少感叹号。我很抱歉这个打字错误。这不是问题的原因:我没有粘贴代码,而是全部重新键入,忘记了惊叹号。我将编辑问题。是的,我注意到编码选项必须首先出现。感谢您明确说明限制条件和您的答案。
<title><!--#echo var="PageTitle" --></title>
Référence