2013-07-25 2 views
1

Изучение к экзамену Зенд-CE, я наткнулся на этот вопрос:Изменено поведение PHP?

Учитывая php.ini настройки:
default_charset = UTF-8
Что будет следующий код печати в браузере?

<?php 

header('Content-Type: text/html; charset=iso-8859-1'); 

echo '&#9986;&#10004;&#10013;'; 

?> 

A. Искаженные данные
B. & # 9986; & # 10004; & # 10013;
C. пустая строка из-за несоответствия кодировок

Ожидаемый ответ C, я ожидал, что это будет - и когда я побежал этот код, я получил искаженные данные (ответ А)! Поэтому мне интересно, изменилось ли поведение PHP в последнее время или если это ошибка в тесте?

+0

Где вы нашли этот вопрос и его неправильный ответ? – deceze

+0

Это произошло с сомнительного сайта http://testpassport.de (вы можете прочитать отрывок здесь: http://pdf.testpassport.de/200-530.pdf) - и это было рекомендовано моим тренером ... – MBaas

+2

Да, я вижу, у них есть «die autoritärsten Informationen» о сертификации Zend-Technologies. Я не думаю, что это означает, что они думают, что это значит :) – Oswald

ответ

2

Я не знаю, что поведение PHP изменилось в этом отношении. Однако стандарт HTML изменился.

Перед HTML 4, Числовые ссылки на символы, такие как &#9986;, где интерпретирован по отношению к набору символов документа (который указан в поле заголовка в Тип содержимого). Разумно, так как кодовая точка 9986 не существует в ISO 8859-1, ничего не печатается.

С HTML 4 числовые ссылки на символы интерпретируются как кодовые обозначения Unicode. Таким образом, echo '&#9986;&#10004;&#10013;'; должен печатать ✂✔✝ независимо от того, что в заголовке заголовка содержимого указано о наборе символов. Целесообразно называть ✂✔✝Углеродистые данные, если вы не знакомы с блоком Unicode Dingbats.

+0

Спасибо за это. Тест должен охватывать PHP 5.3, поэтому, я думаю, мы можем смело предположить поведение HTML4 :-) – MBaas

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