Pārlūkot izejas kodu

修复解析分镜剧本的角色提示词乱码问题

lh 1 mēnesi atpakaļ
vecāks
revīzija
bf9a7b2b50
2 mainītis faili ar 13 papildinājumiem un 7 dzēšanām
  1. 12 6
      app/Libs/Helpers.php
  2. 1 1
      app/Services/Anime/AnimeService.php

+ 12 - 6
app/Libs/Helpers.php

@@ -1,4 +1,4 @@
-<?php
+<?php
 
 use App\Consts\BaseConst;
 use GuzzleHttp\Client;
@@ -2586,7 +2586,7 @@ function handleEpisodeContent($originalContent) {
                         if ($hasPartialPrefix) {
                             // 如果有部分前缀,移除不完整的部分并补全
                             $picPrompt = preg_replace('/^(写实[,,]?|全景[,,]?|正面拍摄[。.]?)+/u', '', $picPrompt);
-                            $picPrompt = $prefix . trim($picPrompt, '。,, ');
+                            $picPrompt = $prefix . preg_replace('/^[。,, ]+|[。,, ]+$/u', '', $picPrompt);
                         } else {
                             // 如果没有前缀,直接在开头添加
                             $picPrompt = $prefix . $picPrompt;
@@ -2599,7 +2599,7 @@ function handleEpisodeContent($originalContent) {
                         $picPrompt = preg_replace('/姿态[::][^.。\n]+/u', '姿态:站立', $picPrompt);
                     } else {
                         // 如果没有姿态描述,在末尾添加"姿态:站立"
-                        $picPrompt = rtrim($picPrompt, '。,, ') . '。姿态:站立。';
+                        $picPrompt = preg_replace('/[。,, ]+$/u', '', $picPrompt) . '。姿态:站立。';
                     }
                     
                     $roleData['pic_prompt'] = $picPrompt;
@@ -2987,7 +2987,7 @@ function handleEpisodeContentForAce($originalContent) {
                         if ($hasPartialPrefix) {
                             // 如果有部分前缀,移除不完整的部分并补全
                             $picPrompt = preg_replace('/^(写实[,,]?|全景[,,]?|正面拍摄[。.]?)+/u', '', $picPrompt);
-                            $picPrompt = $prefix . trim($picPrompt, '。,, ');
+                            $picPrompt = $prefix . preg_replace('/^[。,, ]+|[。,, ]+$/u', '', $picPrompt);
                         } else {
                             // 如果没有前缀,直接在开头添加
                             $picPrompt = $prefix . $picPrompt;
@@ -3000,7 +3000,7 @@ function handleEpisodeContentForAce($originalContent) {
                         $picPrompt = preg_replace('/姿态[::][^.。\n]+/u', '姿态:站立', $picPrompt);
                     } else {
                         // 如果没有姿态描述,在末尾添加"姿态:站立"
-                        $picPrompt = rtrim($picPrompt, '。,, ') . '。姿态:站立。';
+                        $picPrompt = preg_replace('/[。,, ]+$/u', '', $picPrompt) . '。姿态:站立。';
                     }
                     
                     $roleData['pic_prompt'] = $picPrompt;
@@ -3855,12 +3855,16 @@ function logDB($channel, $level, $message, $context = []) {
         // 获取调用堆栈信息
         $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
         $caller = $trace[1] ?? $trace[0];
+
+        // 在 create 之前添加:
+        $jsonEncoded = json_encode($context, JSON_INVALID_UTF8_SUBSTITUTE);
+        $cleanContext = json_decode($jsonEncoded, true);
         
         \App\Models\SystemLog::create([
             'channel' => $channel,
             'level' => $level,
             'message' => $message,
-            'context' => $context,
+            'context' => $cleanContext,
             'file' => $caller['file'] ?? '',
             'line' => $caller['line'] ?? 0,
             'log_time' => date('Y-m-d H:i:s'),
@@ -3878,3 +3882,5 @@ function filterScriptContent($content) {
 
     return $content;
 }
+
+

+ 1 - 1
app/Services/Anime/AnimeService.php

@@ -241,7 +241,7 @@ class AnimeService
         $episode_id = getProp($data, 'episode_id');
         if (!$episode_id) Utils::throwError('1002:请选择分集');
         $episode = DB::table('mp_anime_episodes')->where('id', $episode_id)->first();
-        $roles = json_decode(getProp($data, 'roles'), true);
+        $roles = json_decode(getProp($data, 'roles'), true) ?: [];
         $art_style = getProp($episode, 'art_style');
         
         foreach ($roles as &$role) {