2013-03-29 209 views
3

我有一個包含一個跨度和上面的箭頭:▲HTML特殊字符和PHP

通過Ajax調用,在PHP中,我收到一封包含該箭頭一個POST參數。

$("#mySpan").click(function(){ 

     var arrow = $(this).html(); 
     alert(arrow); //displays the arrow the in an alert box 
     $.post('Something.php',{ arrow: arrow },function(data){ 
      alert(data); 
     }); 

}); 

在PHP中,我只是檢查參數是否是這個箭頭。

if(isset($_POST['arrow']){ 

     $arrow = $_POST['arrow']; 
     if($arrow=='▲') 
      echo 'Its an arrow'; 
     else 
      echo 'Its not an arrow'; 
} 

JS返回一個警告框'它不是一個箭頭'。我是否以正確的方式比較它?

+0

您可能需要使用類似urldecode – Class

+0

檢查該數據是通過AJAX發送,並檢查你有什麼'$ _ POST [「箭頭」]' – MatRt

+0

@MatRt警報的Ajax調用顯示箭頭之前,如果我做'echo $ arrow;'然後做JS警報,它也會顯示箭頭。 –

回答

1

$(this).html();返回實際的Unicode字符而不是字符轉義▲

您可以檢查長度看到這一點:

alert($(this).html().length); // => 1 

接下來,你這種性格發送到後端。所有的AJAX數據都被編碼爲UTF-8。 的UTF-8表示是E2 96 B2

echo $_POST['arrow'] === "\xE2\x96\xB2"; // Its an arrow 
+1

或'echo $ _POST ['arrow'] ==='▲';',如果將源代碼保存爲UTF-8。 – deceze

+0

工作表示感謝,但有一些奇怪的,如果我在比較中使用''\ xE2 \ x96 \ xB2''',它可以工作,如果我使用'\ xE2 \ x96 \ xB2',它不會。 –

+0

@Ali Bassam,PHP將只用雙引號解釋'\ x..'序列。在單引號中只有\和\\被識別。 http://php.net/manual/en/language.types.string.php –