2016-09-21 35 views
-1

這一個可能很容易,但似乎是我的服務器(或我自己)的問題。爲什麼PHP標題(字符集)在HTML <元字符集>中不起作用?

我有這樣一段代碼在index.php

<?php 
header('Content-Type: text/html; charset="UTF-8"'); 

// Some code for generating data to be displayed 
foreach ($ObjectArray as $SingleObject) { 
     print_r($SingleObject->getAllProperties()); 
    } 

而且它這樣做:

Expected result, achievable with header()

但我不希望使用header('Content-Type: text/plain; charset="UTF-8"'); - 我寧願包括HTML我的代碼header.htm

<html> 
    <head> 
     <meta charset="UTF-8"> 
     <title>Test Cards</title> 
     <link rel="stylesheet" type="text/css" href="style.css"> 
     <script src="jquery-3.1.0.min.js"></script> 
     <link rel="stylesheet" href="jquery-ui.css"> 
     <script src="jquery-ui.js"></script> 
    </head> 

index.php這樣的:

<?php 
include 'view/header.htm'; 
echo '<body>'; 
// Some code for generating data to be displayed 
foreach ($ObjectArray as $SingleObject) { 
     print_r($SingleObject->getAllProperties()); 
echo '</body>'; 
echo '</html>'; 
} 

不幸的是,這是不太好。字符集仍然被公認爲是UTF-8,但結果卻是遠離我的期望:

Unexpected result, when normal HTML is used

請告訴我,發生了什麼,以及如何處理這類問題。這是一個結合HTML和PHP的案例(當HTML不存在時,乾淨的PHP會使用一些奇特的樣式嗎?)或者在我的代碼中可能存在一些錯誤?提前:)

+0

HTML和PHP標頭是不同的 - 兩者都應該設置爲UTF-8(或其他,只要它們是相同的),就像你的整個代碼管道一樣。否則,您可能會在您的網頁上顯示損壞的字符。 – Qirel

+0

@Qirel這個不起眼的部分是,當我在應用HTML代碼之前設置PHP標題時,HTML代碼確實顯示爲純文本輸出,而不是HTML代碼... 編輯:好的,我將「text/plain」更改爲在header()函數中使用'text/html',但它仍然看起來非常糟糕,沒有在添加header.htm之前工作的分割線... – Krzysztof

回答

1

由於格式化的樣子被保留,因爲在第一種情況下,你有內容類型text/plain,而在第二種情況下,它是HTML(text/html)。 您可以將其封裝在<pre></pre>標記中以在返回HTML時保留格式。

<?php 

include 'view/header.php'; 
echo '<body>'; 
echo '<pre>'; 
// ... 
// your foreach here 
// ... 
echo '</pre>'; 
echo '</body>'; 
+0

好吧,試試吧。而已。謝謝:)我還將'text/plain'改爲'text/html'並保存了兩個頭(PHP 1和HTML 1)。我希望這是正確的方法:) – Krzysztof

+1

[w3.org](https://www.w3.org/International/questions/qa-html-encoding-declarations#answer)說這是OK。 –