ProofreadingController.php
4.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?php
namespace App\Http\Controllers\Bside\Setting;
use App\Enums\Common\Code;
use App\Helper\Translate;
use App\Http\Controllers\Bside\BaseController;
use App\Http\Logic\Bside\Setting\ProofreadingLogic;
use App\Models\WebSetting\Proofreading;
use App\Models\WebSetting\WebSettingCountry;
class ProofreadingController extends BaseController
{
const LANGUAGE_ID = 1;//默认语言英语
const TYPE_IMAGE = 2;//校队图片
/**
* @name :lists
* @author :lyh
* @method :post
* @time :2023/6/12 10:52
*/
public function lists(){
//获取语种信息
$webSettingCountryModel = new WebSettingCountry();
$countryInfo = $webSettingCountryModel->read(['id'=>$this->param['language_id']]);
//获取当前链接和语种的校队列表
$proofreadingModel = new Proofreading();
$list = $proofreadingModel->list(['url'=>$this->param['url'],'language_id'=>$this->param['language_id'],'type'=>1],'id',['text','translate']);
//获取当前URl的所有文本内容
$new_list = $this->getUrlRead($this->param['url']);
if(empty($list)){
$data = [];
foreach ($new_list as $v){
$data[] = [
'text'=>$v,
'translate'=>Translate::tran($v, $countryInfo['alias']),
];
}
return $this->response('success',Code::SUCCESS,$data);
}
$old_list = [];
$arr = [];
foreach ($list as $v){
$old_list[] = $v['text'];
$arr[$v['text']] = $v['translate'];
}
$data_list = array_merge(array_diff($old_list, $new_list),array_diff($new_list, $old_list));
$data = [];
foreach ($data_list as $v){
if(isset($arr[$v])){
$data[] = [
'text'=>$v,
'translate'=>$arr[$v],
];
}else{
$data[] = [
'text'=>$v,
'translate'=>Translate::tran($v, $countryInfo['alias']),
];
}
}
$this->response('success',Code::SUCCESS,$data);
}
/**
* @name :(新增/更新多语言)save
* @author :lyh
* @method :post
* @time :2023/6/12 10:52
*/
public function save(ProofreadingLogic $proofreadingLogic){
$proofreadingLogic->proofreadingSave();
$this->response('success');
}
/**
* @name :(当前项目选中的语言列表)languageList
* @author :lyh
* @method :post
* @time :2023/6/12 15:52
*/
public function languageList(ProofreadingLogic $proofreadingLogic){
$list = $proofreadingLogic->countryLanguageList($this->map,$this->order);
$this->response('success',Code::SUCCESS,$list);
}
/**
* @remark :获取Url内容
* @name :getUrlRead
* @author :lyh
* @method :post
* @time :2023/11/22 10:02
*/
public function getUrlRead($url){
$contextOptions = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
];
$context = stream_context_create($contextOptions);
$sourceCode = file_get_contents($url, false, $context);
$pattern = '/<style\b[^>]*>(.*?)<\/style>/s'; // 定义匹配`<style>`标签及其内容的正则表达式
$strippedContent = preg_replace($pattern, '', $sourceCode); // 删除`<style>`标签及其内容
$pattern = '/<script\b[^>]*>(.*?)<\/script>/s'; // 定义匹配`<script>`标签及其内容的正则表达式
$strippedContent = preg_replace($pattern, '', $strippedContent); // 删除`<script>`标签及其内容
$pattern = '/<link\b[^>]*>/'; // 定义匹配 `<link>` 标签的正则表达式
$strippedContent = preg_replace($pattern, '', $strippedContent); // 删除 `<link>` 标签
$pattern = '/<footer\b[^>]*>(.*?)<\/footer>/s'; // 定义匹配`<script>`标签及其内容的正则表达式
$strippedContent = preg_replace($pattern, '', $strippedContent); // 删除`<script>`标签及其内容
$pattern = '/>([^<]+)</'; // 定义匹配中间内容不是标签的正则表达式
$matches = array();
preg_match_all($pattern, $strippedContent, $matches);
$textContentArray = array_filter($matches[1], function($item) {
return !empty(trim($item));
});
$textContentArray = array_values($textContentArray);
$uniqueArray = array_unique($textContentArray);
return $this->success($uniqueArray);
}
}