亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP 在特定的 html div 上使用 str_replace

PHP 在特定的 html div 上使用 str_replace

PHP
侃侃無極 2023-03-11 13:51:16
我們希望在標點符號中添加細線間距,以改善網頁排版的外觀。使用 str_replace添加細線間距以更改(what)為(&#8202;what&#8202;)似乎非常簡單,多次覆蓋四個主要標點符號。str_replace("(", "(&#8202;", $content);str_replace(")", "&#8202;)", $content);str_replace("?", "&#8202;?", $content);str_replace("!", "&#8202;!", $content);但是我們需要將替換過程限制為僅主 div 中的內容,<div id="main">bla (bla) bla</div>因為目標標點符號( ? ! )也被該頁面上的 CSS、JS 等使用。在應用空格插入之前,頁面將被縮小,因此評論、換行符等將被刪除,而不是一個問題。有沒有辦法只定位內容字符串的一部分?第二個問題是如何避免?在鏈接 url 中定位?基本上試圖忽略<a href=url'>主 div 中的項目。這個問題不是另一個詢問有關提取信息的問題的重復。這個是關于修改網頁中的單個字母數字字符。
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

您需要做的是將文檔加載到 中DOMDocument,然后選擇元素中的所有相關元素<div id="main">并替換其中的文本。


像這樣的東西


$find = ['(', ')', '?', '!']; // characters to find

$replace = ['(&#8202;', '&#8202;)', '&#8202;?', '&#8202;!']; // replacements


// create a "text-contains" selector for all the characters

$selector = implode(' or ', array_map(function($char) {

? ? return sprintf('contains(text(), "%s")', $char);

}, $find));


// create an XPath query to get the text nodes

$query = sprintf('//div[@id="main"]//*[%s]/text()', $selector);


$doc = new DOMDocument();

$doc->loadHTML($content);


$xpath = new DOMXPath($doc);

$elements = $xpath->query($query);


foreach ($elements as $element) {

? ? // You need to decode the entities when working directly with text nodes

? ? $element->nodeValue = html_entity_decode(str_replace($find, $replace, $element->nodeValue));

}


$newContent = $doc->saveHTML();




查看完整回答
反對 回復 2023-03-11
  • 1 回答
  • 0 關注
  • 87 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號