aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/posting.php')
-rw-r--r--phpBB/posting.php23
1 files changed, 23 insertions, 0 deletions
diff --git a/phpBB/posting.php b/phpBB/posting.php
index 57b52320a3..48c2d8da6a 100644
--- a/phpBB/posting.php
+++ b/phpBB/posting.php
@@ -736,6 +736,29 @@ if ($save && $user->data['is_registered'] && $auth->acl_get('u_savedrafts') && (
$subject = (!$subject && $mode != 'post') ? $post_data['topic_title'] : $subject;
$message = $request->variable('message', '', true);
+ /**
+ * Replace Emojis and other 4bit UTF-8 chars not allowed by MySQL to UCR/NCR.
+ * Using their Numeric Character Reference's Hexadecimal notation.
+ * Check the permissions for posting Emojis first.
+ */
+ if ($auth->acl_get('u_emoji'))
+ {
+ $subject = utf8_encode_ucr($subject);
+ }
+ else
+ {
+ /**
+ * Check for out-of-bounds characters that are currently
+ * not supported by utf8_bin in MySQL
+ */
+ if (preg_match_all('/[\x{10000}-\x{10FFFF}]/u', $subject, $matches))
+ {
+ $character_list = implode('<br>', $matches[0]);
+
+ trigger_error($user->lang('UNSUPPORTED_CHARACTERS_SUBJECT', $character_list));
+ }
+ }
+
if ($subject && $message)
{
if (confirm_box(true))