mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00:00
further checks on maximum storage length
git-svn-id: file:///svn/phpbb/branches/phpBB-3_0_0@8667 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
b8647dc952
commit
11f27bee84
4 changed files with 43 additions and 20 deletions
|
@ -822,7 +822,7 @@ function tz_select($default = '', $truncate = false)
|
||||||
{
|
{
|
||||||
if ($truncate)
|
if ($truncate)
|
||||||
{
|
{
|
||||||
$zone_trunc = truncate_string($zone, 50, false, '...');
|
$zone_trunc = truncate_string($zone, 50, 255, false, '...');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1066,8 +1066,16 @@ function extension_allowed($forum_id, $extension, &$extensions)
|
||||||
/**
|
/**
|
||||||
* Truncates string while retaining special characters if going over the max length
|
* Truncates string while retaining special characters if going over the max length
|
||||||
* The default max length is 60 at the moment
|
* The default max length is 60 at the moment
|
||||||
|
* The maximum storage length is there to fit the string within the given length. The string may be further truncated due to html entities.
|
||||||
|
* For example: string given is 'a "quote"' (length: 9), would be a stored as 'a "quote"' (length: 19)
|
||||||
|
*
|
||||||
|
* @param string $string The text to truncate to the given length. String is specialchared.
|
||||||
|
* @param int $max_length Maximum length of string (multibyte character count as 1 char / Html entity count as 1 char)
|
||||||
|
* @param int $max_store_length Maximum character length of string (multibyte character count as 1 char / Html entity count as entity chars).
|
||||||
|
* @param bool $allow_reply Allow Re: in front of string
|
||||||
|
* @param string $append String to be appended
|
||||||
*/
|
*/
|
||||||
function truncate_string($string, $max_length = 60, $allow_reply = true, $append = '')
|
function truncate_string($string, $max_length = 60, $max_store_length = 255, $allow_reply = true, $append = '')
|
||||||
{
|
{
|
||||||
$chars = array();
|
$chars = array();
|
||||||
|
|
||||||
|
@ -1090,6 +1098,21 @@ function truncate_string($string, $max_length = 60, $allow_reply = true, $append
|
||||||
$stripped = true;
|
$stripped = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Due to specialchars, we may not be able to store the string...
|
||||||
|
if (utf8_strlen($string) > $max_store_length)
|
||||||
|
{
|
||||||
|
// let's split again, we do not want half-baked strings where entities are split
|
||||||
|
$_chars = utf8_str_split(htmlspecialchars_decode($string));
|
||||||
|
$chars = array_map('utf8_htmlspecialchars', $_chars);
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
array_pop($chars);
|
||||||
|
$string = implode('', $chars);
|
||||||
|
}
|
||||||
|
while (utf8_strlen($string) > $max_store_length || !sizeof($chars));
|
||||||
|
}
|
||||||
|
|
||||||
if ($strip_reply)
|
if ($strip_reply)
|
||||||
{
|
{
|
||||||
$string = 'Re: ' . $string;
|
$string = 'Re: ' . $string;
|
||||||
|
|
|
@ -1282,7 +1282,7 @@ function restore_config($schema)
|
||||||
// Most are...
|
// Most are...
|
||||||
if (is_string($config_value))
|
if (is_string($config_value))
|
||||||
{
|
{
|
||||||
$config_value = truncate_string(utf8_htmlspecialchars($config_value), 255, false);
|
$config_value = truncate_string(utf8_htmlspecialchars($config_value), 255, 255, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
set_config($config_name, $config_value);
|
set_config($config_name, $config_value);
|
||||||
|
|
|
@ -1651,7 +1651,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u
|
||||||
// Display edit info if edit reason given or user is editing his post, which is not the last within the topic.
|
// Display edit info if edit reason given or user is editing his post, which is not the last within the topic.
|
||||||
if ($data['post_edit_reason'] || (!$auth->acl_get('m_edit', $data['forum_id']) && ($post_mode == 'edit' || $post_mode == 'edit_first_post')))
|
if ($data['post_edit_reason'] || (!$auth->acl_get('m_edit', $data['forum_id']) && ($post_mode == 'edit' || $post_mode == 'edit_first_post')))
|
||||||
{
|
{
|
||||||
$data['post_edit_reason'] = truncate_string($data['post_edit_reason'], 255, false);
|
$data['post_edit_reason'] = truncate_string($data['post_edit_reason'], 255, 255, false);
|
||||||
|
|
||||||
$sql_data[POSTS_TABLE]['sql'] = array(
|
$sql_data[POSTS_TABLE]['sql'] = array(
|
||||||
'post_edit_time' => $current_time,
|
'post_edit_time' => $current_time,
|
||||||
|
|
Loading…
Add table
Reference in a new issue