PHPize Online / SQLize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
Copy Clear
Copy Format Clear
<?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, mb_strlen($randomChar, 'UTF-8')); } // 您提供的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;
Show:  
Copy Clear