Fix broken emoji and other HTML entities when using cut_str()

https://xetown.com/questions/1855257
This commit is contained in:
Kijin Sung 2025-02-13 22:39:13 +09:00
parent 651fa56c4f
commit 00db2ab402
2 changed files with 4 additions and 1 deletions

View file

@ -495,7 +495,8 @@ function cut_str($string, $cut_size = 0, $tail = '...'): string
if(isset($GLOBALS['use_mb_strimwidth']) || function_exists('mb_strimwidth'))
{
$GLOBALS['use_mb_strimwidth'] = TRUE;
return mb_strimwidth($string, 0, $cut_size + 4, $tail, 'utf-8');
$string = html_entity_decode($string);
return escape(mb_strimwidth($string, 0, $cut_size + 4, $tail, 'utf-8'));
}
$chars = array(12, 4, 3, 5, 7, 7, 11, 8, 4, 5, 5, 6, 6, 4, 6, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, 8, 6, 8, 6, 10, 8, 8, 9, 8, 8, 7, 9, 8, 3, 6, 7, 7, 11, 8, 9, 8, 9, 8, 8, 7, 8, 8, 10, 8, 8, 8, 6, 11, 6, 6, 6, 4, 7, 7, 7, 7, 7, 3, 7, 7, 3, 3, 6, 3, 9, 7, 7, 7, 7, 4, 7, 3, 7, 6, 10, 6, 6, 7, 6, 6, 6, 9);

View file

@ -81,6 +81,8 @@ class LegacyTest extends \Codeception\Test\Unit
{
$this->assertEquals('안녕하세요? 라이믹스...', cut_str('안녕하세요? 라이믹스입니다. 제목이 너무 길어서 잘립니다.', 20));
$this->assertEquals('Hello? This is Rhymix...', cut_str('Hello? This is Rhymix. This title is very long.', 20));
$this->assertEquals('Hello <world> 😁', cut_str('Hello <world> 😁', 20));
$this->assertEquals('Hello "Rhymix" test &...', cut_str('Hello "Rhymix" test &', 20));
}
public function testTimeFunctions()