<?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>标签进行处理
$randomIndex = mt_rand(0, count($pContents) - 1);
$randomPContent = $pContents[$randomIndex];
// 固定位置的汉字替换
$processedPContent = replaceFixedHanzi($randomPContent, $seed);
// 将原始内容替换为处理后的内容
return str_replace($randomPContent, $processedPContent, $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];
// 替换固定位置的汉字
return substr_replace($text, '000000', $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 = 1211115153214;
// 调用processHtml函数,对HTML文本进行处理
$processedHtml = processHtml($htmlText, $seed);
// 输出处理后的HTML文本
echo $processedHtml;