<?php
/**
* 从HTML文本中随机选择一个或两个<p>标签的内容,并对其中的一个或两个汉字进行处理和替换
*
* @param string $html HTML文本
* @param int $seed 随机数种子
* @return string 处理后的HTML文本
*/
function processHtml(string $html, int $seed): string
{
// 获取所有包含文本内容的<p>标签
$pContents = getTextPContents($html);
if (empty($pContents)) {
return $html;
}
// 设置随机数生成器的种子
mt_srand($seed);
// 根据<p>标签的数量,决定是对单个标签进行两次替换,还是选择两个不同的标签分别替换
if (count($pContents) === 1) {
$randomPContent = $pContents[0];
$processedPContent = replaceFixedHanzi($randomPContent, $seed);
$processedPContent = replaceFixedHanzi($processedPContent, $seed);
} else {
$randomIndexes = array_rand($pContents, 2);
$randomPContent1 = $pContents[$randomIndexes[0]];
$randomPContent2 = $pContents[$randomIndexes[1]];
$processedPContent1 = replaceFixedHanzi($randomPContent1, $seed);
$processedPContent2 = replaceFixedHanzi($randomPContent2, $seed);
$html = str_replace($randomPContent1, $processedPContent1, $html);
$html = str_replace($randomPContent2, $processedPContent2, $html);
}
// 将原始内容替换为处理后的内容
return $html;
}
/**
* 从HTML文本中获取所有包含文本内容的<p>标签的内容
*
* @param string $html HTML文本
* @return array 包含文本内容的<p>标签的内容数组
*/
function getTextPContents(string $html): array
{
$pContents = [];
// 创建一个DOMDocument对象并加载HTML
$dom = new DOMDocument();
$loadResult = @$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
if ($loadResult === false) {
// 处理HTML解析失败的情况
return $pContents;
}
// 创建一个DOMXPath对象
$xpath = new DOMXPath($dom);
// 获取所有<p>标签
$pNodes = $xpath->query('//p');
// 遍历所有<p>标签,找到包含文本内容的<p>标签
foreach ($pNodes as $node) {
$nodeValue = trim($node->nodeValue);
if (!empty($nodeValue)) {
$pContents[] = $nodeValue;
}
}
return $pContents;
}
/**
* 替换文本中固定位置的一个汉字,并允许对该汉字进行处理
*
* @param string $text 原始文本
* @param int $seed 随机数种子
* @return string 替换后的文本
*/
function replaceFixedHanzi(string $text, int $seed): string
{
// 正则匹配汉字
$pattern = '/\p{Han}/u';
preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE);
// 如果没有找到汉字,直接返回原始文本
if (empty($matches[0])) {
return $text;
}
// 设置随机数生成器的种子
mt_srand($seed);
// 获取固定位置的汉字
$randomCharIndex = mt_rand(0, count($matches[0]) - 1);
$randomChar = $matches[0][$randomCharIndex][0];
$randomCharPosition = $matches[0][$randomCharIndex][1];
// 打印出将被替换的汉字
echo "将被替换的汉字: $randomChar\n";
// 在这里对汉字进行处理,例如转换为大写
$processedChar = strtoupper($randomChar);
// 替换固定位置的汉字
return substr_replace($text, $processedChar, $randomCharPosition, 3);
}
// 您提供的HTML文本
$htmlText = '
<p style="text-align:center;"><img src="/wp-content/img/2024/03/2024030987fd1d897.jpg"/></p>
<p><strong>【比赛关键事件】</strong></p>
<p><strong>第10分钟,加纳乔禁区左侧扣球变向被塔尔科夫斯基绊倒,裁判果断判罚点球。↓</strong></p>
<p><strong>B费主罚点球一蹴而就,曼联1-0埃弗顿!↓</strong></p>
<p><strong>两度造点!第35分钟,加纳乔中路凭借个人能力突破,杀入禁区被戈弗雷放倒,裁判再次判罚点球。↓</strong></p>
';
// 设置种子值
$seed = 1210111151543214;
// 调用processHtml函数,对HTML文本进行处理
$processedHtml = processHtml($htmlText, $seed);
// 输出处理后的HTML文本
echo $processedHtml;