2011-05-10 111 views
2

我$從形式_POST'ing以下標題:PHP - 逃離長破折號

Google’s New Partner Android Update Initiative: Very Promising — Maybe; We’ll See 

而且處理頁面上,如果我做的第一件事就是

echo "<pre>"; 
    print_r($_POST); 
    die(); 

我見:

Google’s New Partner Android Update Initiative: Very Promising â€」 Maybe; We’ll See 

據我所知,有職能轉換&轉義字符和他們的HTML等價物,但如何能我確保將這些內容添加到正確編碼的$ _POST中?

乾杯,

回答

2

不知道有沒有什麼幫助,但它似乎是UTF-8編碼搞混了(控制字符在我看來,有點眼熟......)。嘗試輸出utf8_encode()utf8_decode()

+0

當我utf8_decode()發佈的內容是「Google新合作伙伴Android更新計劃:非常有希望嗎?也許;我們會看到」。我更多地問爲什麼它會以這種格式放入$ _POST中。謝謝。 – barfoon 2011-05-10 20:39:19

+0

如果嘗試使用utf8_encode()輸出,會發生什麼情況?我想問題是表單提交了錯誤的字符集/內容類型。嘗試確定瀏覽器使用的字符集。或者通過PHP頭部('Content-type:text/html; charset = utf-8');或HTML元標記:'' – GeneSys 2011-05-10 20:55:28

+0

使用utf8_encode()輸出我輸入的問題中的原始字符串。我已經在表單 – barfoon 2011-05-10 21:02:53

2

帶表格的頁面和顯示頁面都需要使用相同的字符集。要重現您展示的行爲,我不得不創建2頁,一個形式,

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

其發佈到一個頁面,而不說。

如果我把meta標籤放在兩個頁面中,它會正確輸出,如果我從兩個頁面中刪除它,它都會正確輸出。

如果只有表單有它,你會得到你發佈的內容,如果只有接收的頁面有它,你會得到?的。


test.php的

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
<form method="post" action="test2.php"> 
<input type="text" name="string"> 
<input type="submit"> 
</form> 

test2.php

<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
<?php 
if(isset($_POST['string'])) 
{ 
    echo "<pre>"; 
    print_r($_POST['string']); 
    die(); 
} 
?> 

如果我是你的字符串粘貼到test.php的輸入框中,點擊提交,我拿回來在正常test2.php。如果我刪除test2.php的第一行,我會得到你描述的行爲。

+0

我的表單頁面和顯示頁面都有該標籤,我仍然可以看到發佈內容。該標記位於我網站的標題代碼中,在所有頁面中一致 – barfoon 2011-05-10 22:24:15

+0

我將使用我使用的示例更新我的答案。看看問題是否發生在你的瀏覽器/服務器組合中,如果沒有,你的頁面中可能還有其他東西會影響它。 – John 2011-05-10 22:58:07

+0

在上面看到我的評論是什麼伎倆。謝謝你的幫助約翰。 – barfoon 2011-05-11 18:14:07