From 51d6662d7cb28e0498f20767a6e98e6e6125ba0f Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Wed, 15 Mar 2023 11:48:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/model/analyzeRule/AnalyzeRule.kt | 25 +++++++++++++------ .../legado/app/model/webBook/BookContent.kt | 2 +- .../java/io/legado/app/utils/HtmlFormatter.kt | 9 +++++++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt index 3bbac03df..71dc443ee 100644 --- a/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt +++ b/app/src/main/java/io/legado/app/model/analyzeRule/AnalyzeRule.kt @@ -201,11 +201,18 @@ class AnalyzeRule( return getString(ruleList, mContent, isUrl) } + fun getString(ruleStr: String?, unescape: Boolean): String { + if (TextUtils.isEmpty(ruleStr)) return "" + val ruleList = splitSourceRule(ruleStr) + return getString(ruleList, unescape = unescape) + } + @JvmOverloads fun getString( ruleList: List, mContent: Any? = null, - isUrl: Boolean = false + isUrl: Boolean = false, + unescape: Boolean = true ): String { var result: Any? = null val content = mContent ?: this.content @@ -239,13 +246,15 @@ class AnalyzeRule( } } if (result == null) result = "" - val str = kotlin.runCatching { - Entities.unescape(result.toString()) - }.onFailure { - log("Entities.unescape() error\n${it.localizedMessage}") - }.getOrElse { - result.toString() - } + val str = if (unescape) { + kotlin.runCatching { + Entities.unescape(result.toString()) + }.onFailure { + log("Entities.unescape() error\n${it.localizedMessage}") + }.getOrElse { + result.toString() + } + } else result.toString() if (isUrl) { return if (str.isBlank()) { baseUrl ?: "" diff --git a/app/src/main/java/io/legado/app/model/webBook/BookContent.kt b/app/src/main/java/io/legado/app/model/webBook/BookContent.kt index bc891de25..c5b22055a 100644 --- a/app/src/main/java/io/legado/app/model/webBook/BookContent.kt +++ b/app/src/main/java/io/legado/app/model/webBook/BookContent.kt @@ -150,7 +150,7 @@ object BookContent { val nextUrlList = arrayListOf() analyzeRule.chapter = chapter //获取正文 - var content = analyzeRule.getString(contentRule.content) + var content = analyzeRule.getString(contentRule.content, unescape = false) content = HtmlFormatter.formatKeepImg(content, rUrl) //获取下一页链接 val nextUrlRule = contentRule.nextContentUrl diff --git a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt index dfc46ecbe..8e4c05ec3 100644 --- a/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt +++ b/app/src/main/java/io/legado/app/utils/HtmlFormatter.kt @@ -1,6 +1,8 @@ package io.legado.app.utils +import io.legado.app.constant.AppLog import io.legado.app.model.analyzeRule.AnalyzeUrl +import org.jsoup.nodes.Entities import java.net.URL import java.util.regex.Pattern @@ -29,6 +31,13 @@ object HtmlFormatter { .replace("\\s*\\n+\\s*".toRegex(), "\n  ") .replace("^[\\n\\s]+".toRegex(), "  ") .replace("[\\n\\s]+$".toRegex(), "") + .let { s -> + kotlin.runCatching { + Entities.unescape(s) + }.onFailure { + AppLog.put("Entities.unescape() error\n${it.localizedMessage}", it) + }.getOrDefault(s) + } } fun formatKeepImg(html: String?, redirectUrl: URL? = null): String {