Столкнулся с проблемой описанной в статье: http://blog.portal.kharkov.ua/2012/09/16/php54-bug/ У меня кодировка страницы 'cp1251'. В PHP 5.6 функция: PHP: htmlspecialchars($string, ENT_QUOTES); возвращает пустую строку. Проблема проявляется начиная с PHP 5.4 Изменил на: PHP: htmlspecialchars($string, ENT_QUOTES, 'cp1251'); в PHP 5.6 код заработал нормально. Вариант (тоже предложенный в статье): PHP: htmlspecialchars($string, NULL, ''); в PHP 5.6 возвращает пустую строку (в PHP 5.4 работает нормально) Попутно возник вопрос: в CMS которую я "ковыряю" есть еще функция html_entity_decode(). Про нее в статье ничего не сказано. В ней тоже, для корректной работы, нужно кодировку явно указывать?
По документации можно? https://secure.php.net/manual/ru/function.html-entity-decode.php Что тест показал?
Код: PHP: header('Content-Type: text/html; charset= cp1251'); $string = '&"'."'".'<>Привет, мир!'; echo 'Начальная строка1: '.$string."<br>\r\n<br>\r\n"; echo 'После htmlspecialchars($string, ENT_QUOTES): '.htmlspecialchars($string, ENT_QUOTES)."<br>\r\n"; echo 'После htmlspecialchars($string, ENT_QUOTES, "cp1251"): '.htmlspecialchars($string, ENT_QUOTES, "cp1251")."<br>\r\n<br>\r\n"; echo 'После htmlentities($string, ENT_QUOTES): '.htmlentities($string, ENT_QUOTES)."<br>\r\n"; echo 'После htmlentities($string, ENT_QUOTES, "cp1251"): '.htmlentities($string, ENT_QUOTES, "cp1251")."<br>\r\n<br>\r\n"; $string = htmlentities($string, ENT_QUOTES, 'cp1251'); echo 'Начальная строка2: '.$string."<br>\r\n<br>\r\n"; echo 'После html_entity_decode($string, ENT_QUOTES): '.html_entity_decode($string, ENT_QUOTES)."<br>\r\n"; echo 'После html_entity_decode($string, ENT_QUOTES, "cp1251"): '.html_entity_decode($string, ENT_QUOTES, "cp1251"); выполненный в PHP 5.6, формирует страницу: HTML: Начальная строка1: &"'<>Привет, мир!<br> <br> После htmlspecialchars($string, ENT_QUOTES): <br> После htmlspecialchars($string, ENT_QUOTES, "cp1251"): &"'<>Привет, мир!<br> <br> После htmlentities($string, ENT_QUOTES): <br> После htmlentities($string, ENT_QUOTES, "cp1251"): &"'<>Привет, мир!<br> <br> Начальная строка2: &"'<>Привет, мир!<br> <br> После html_entity_decode($string, ENT_QUOTES): &"'<>Привет, мир!<br> После html_entity_decode($string, ENT_QUOTES, "cp1251"): &"'<>Привет, мир! Функции: htmlspecialchars(); htmlentities() - в PHP 5.6, при формировании страницы с кодировкой 'cp1251', корректно работают только c указанием 'cp1251'. Функция html_entity_decode(): что с 'cp1251'; что без 'cp1251' - срабатывает одинаково. Вывод: указание кодировки 'cp1251' в html_entity_decode() необязательно... Вроде как... Или, для правильного стиля программирования, все же рекомендуется указывать кодировку?
Если у тебя файлы PHP в UTF-8 и например ты работаешь с другими текстовыми файлами и там windows-1251, то тогда указывай кодировку. Если коротко указывай если там другая кодировка чем в проекте.