некоторые персонажи ведут себя необычно в функции htmlentities

0

Поэтому сначала я заметил, что амперсанд (&) находится в функции htmlentities, он будет считать амперсанд как 5 символов. Итак, этот код:

$a = htmlentities("&12345");
$b = substr($a,0,6);
  echo $b; 

будет echo '&1' поскольку, я считаю, что это счет и как 5 символов. более интересно, с символом GBP (E), который игнорируется все вместе так:

$a = htmlentities("£");
  echo $a;   

эхо ничего. Я получаю те же результаты в Chrome и FF. Я не знаю, является ли это ошибкой, или я должен использовать другой синтаксис. Кто-нибудь знает, почему это может произойти? благодаря

ОБНОВИТЬ

Я решил проблему с этим: $a = htmlentities("£", ENT_COMPAT, 'ISO-8859-15'); но проблема амперсанда остается.

Теги:
html-entities

1 ответ

1
Лучший ответ

Проблема в том, что вы просматриваете вывод в окне браузера, где вывод из htmlentities (и эквивалентных функций) отображается для отображения конечному пользователю.

Например:

echo htmlentities("&");

Вывод & потому что он преобразует символ & в его эквивалент html. Смотрите, что это пять символов. Однако вы не видите полный текст & потому что вы просматриваете из своего браузера, который предварительно отобразил его как символ &. В firfox, если вы щелкните правой кнопкой мыши по окну просмотра и нажмите "View Page Source", вы увидите полный текст &...

Ваш код:

$a = htmlentities("&12345"); //Outputs: &12345
$b = substr($a, 0, 6); //Selects first six charachters: &, a, m, p, ; and 1
echo $b; // Echo's: &1 which is displayed by the browser as &1

Чтобы обойти это, вы можете изменить порядок своих функций:

$a = substr("&12345", 0, 6);
echo htmlentities($a);
  • 0
    Большое спасибо за объяснение. Вы знаете, как я мог решить эту проблему?
  • 0
    Так что это выводит: &12345 ? Да, есть простое решение, просто используйте substr до htmlentities . Т.е. htmlentities(substr("&12345", 0, 6)); - Смотрите обновление в ответе
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню