2013-03-29 4 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 предупреждение перед вызовом Аякса отображает стрелку, и если я сделаю «echo $ arrow;», а затем выполните JS alert, он также покажет стрелку. –

ответ

1

$(this).html(); возвращает фактический символ Юникода вместо escape-символа ▲.

Вы можете проверить длину, чтобы увидеть это:

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 ['стрелка'] === '▲';', если вы сохраните исходный код как UTF-8. – deceze

+0

Это сработало, но есть что-то странное, если я использую '' \ xE2 \ x96 \ xB2 "' в сравнении, он работает, если я использую '' \ xE2 \ x96 \ xB2'', это не так. –

+0

@Ali Bassam, PHP будет интерпретировать последовательности '\ x..' только в двойных кавычках. В одинарных кавычках признаются только \\ и \\. http://php.net/manual/en/language.types.string.php –

Смежные вопросы