Поэтому сначала я заметил, что амперсанд (&) находится в функции 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');
но проблема амперсанда остается.
Проблема в том, что вы просматриваете вывод в окне браузера, где вывод из 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);
&12345
? Да, есть простое решение, просто используйтеsubstr
доhtmlentities
. Т.е.htmlentities(substr("&12345", 0, 6));
- Смотрите обновление в ответе