diff --git a/phpBB/adm/style/admin.js b/phpBB/adm/style/admin.js index 4f7f5a990b..a5c090d8c0 100644 --- a/phpBB/adm/style/admin.js +++ b/phpBB/adm/style/admin.js @@ -162,6 +162,22 @@ function parse_document(container) }); + /** + * Dynamically control a text field's maxlength (allows emoji to be counted as 1 character) + */ + container.find('#sitename_short').each(function() { + const $this = this; + const maxLength = $this.maxLength; + $this.maxLength = maxLength * 2; + $this.addEventListener('input', () => { + const inputChars = Array.from($this.value); + if (inputChars.length > maxLength) { + $this.value = inputChars.slice(0, maxLength).join(''); + } + }); + + }); + /** * Responsive tabs */ diff --git a/phpBB/phpbb/manifest.php b/phpBB/phpbb/manifest.php index 1a7d0148e5..a2701b28c3 100644 --- a/phpBB/phpbb/manifest.php +++ b/phpBB/phpbb/manifest.php @@ -69,9 +69,12 @@ class manifest $board_path = $this->config['force_server_vars'] ? $this->config['script_path'] : $this->path_helper->get_web_root_path(); + $sitename = html_entity_decode($this->config['sitename'], ENT_QUOTES, 'UTF-8'); + $sitename_short = html_entity_decode($this->config['sitename_short'], ENT_QUOTES, 'UTF-8'); + $manifest = [ - 'name' => $this->config['sitename'], - 'short_name' => $this->config['sitename_short'] ?: substr($this->config['sitename'], 0, 12), + 'name' => $sitename, + 'short_name' => $sitename_short ?: utf8_substr($sitename, 0, 12), 'display' => 'standalone', 'orientation' => 'portrait', 'dir' => $this->language->lang('DIRECTION'),