人的血液7年会全部替换一遍,鱼的记忆只有7秒。
当地时间2023年8月24日,航拍日本福岛第一核电站。东京电力公司宣布,已于当天下午1点开始将储存在核电站内的处理过的水排入海洋。福岛核污染水于8月24日开始排入海洋。这一排污进程将持续数十年。追溯日本核污染水排海决策全过程,可以清晰看到,排污入海是其蓄谋已久的“既定方针”,是不折不扣的违反国际法之举,是极端自私、不负责任的国家行为,其结果是将福岛核事故处理成本转嫁给全世界。当地时间2011年3月14日,日本经济产业省原子能安全和保安院宣布,福岛第一核电站3号机组当地时间11时01分发生爆炸,反应堆所在建筑遭到损坏,但放置反应堆的容器没有损坏。(视频截屏组合图)福岛第一核电站自2011年3月发生严重事故以来,因用水冷却熔毁堆芯以及雨水和地下水等流过,每天产生大量高浓度核污染水。2011年4月,核电站运营方东京电力公司故意将核污染水排入大海,引发社会高度关注和担忧。同年12月,东电表示已制定一份“低浓度污染水”排海计划。2011年3月20日,日本,爆炸后的福岛第一核电站3、4号机组航拍图。2013年3月,东电处理核污染水的关键设施“多核素处理系统”(ALPS)投入试运行,但此后不断出现问题:频繁漏水,2018年被曝经过处理后的水中锶等放射性物质仍超标,2021年被发现用于吸附放射性物质的排气口滤网近半数损坏……当地时间2013年11月7日,日本福岛县,日本东电公司公布即将取出核燃料的福岛一号核电站4号反应堆内部照片。当地时间2013年11月7日,日本福岛县,日本东电公司公布有关福岛核泄漏的处理画面。自从ALPS投入运行后,日方就把经过处理的核污染水称为“处理水”。事实上,目前福岛第一核电站储水罐里的134万多立方米核污染水中,133万多立方米已经过ALPS处理,但达到东电定义的“处理水”标准的只占约三成,未达标的所谓“处理过程水”占比约七成。另有近9000立方米核污染水尚未经过ALPS处理。 而这些“处理水”的最终去向又该如何解决?早在2013年12月,日本核能主管部门经济产业省就设立工作小组就“处理水”排放问题进行技术探讨。当地时间2014年5月21日,日本东京电力公司按照“地下水迂回排放计划”开始将此前抽取的560吨地下水排入大海,全程预计耗时2个小时左右。2016年6月,该工作小组发布报告称,经过对海洋排放、地下掩埋(加入水泥等固化后埋入地下)、地层注入(用管道注入地层深处)、蒸汽释放(气化为水蒸气排入大气)、氢气释放(电解为氢气排入大气)等5种方法的评估,将“处理水”稀释后排海是“成本最低”的方法。这份报告为后来的排海方案定了调,但公布后遭到日本农林渔业等团体的强烈反对。据日本媒体披露的消息显示,福岛第一核电站反应堆附近的辐射量超过每小时100微西弗,显示出尽管事故已经过去5年,但核电站内部的辐射量依然很高。东京电力公司的员工穿防辐射服作业。当地时间2016年2月22日,日本福岛第一核电站,东京电力公司的员工穿防辐射服作业。2017年7月,经产省在福岛市举行“废炉与污染水对策当地协调会议”,摆出要与当地协商的姿态。但时任东电会长川村隆在会前对媒体声称东电已就排海“做出判断”,引发社会广泛不满。为说服公众,日本政府成立了一个有相关领域专家参加的委员会。2018年8月,该委员会在福岛和东京举行听证会,名义上是听取民众意见,但实际上是要为排海方案背书。听证会上,日本原子能规制委员会时任委员长更田丰志有关“排海是唯一可行选项”的说法遭到各方质疑。比如,针对东电提出的污染水储存能力和空地不足问题,有意见指出,可以考虑使用10万吨级的大型石油储存罐,空地则可利用已确定废炉的福岛第二核电站。针对核污染水处理的技术难度问题,有意见提到,可以采用1979年美国三里岛核事故曾经用过的水蒸气排放方式。还有意见指出,ALPS无法去除的放射性元素氚的分离技术正在研究中,应在该技术成熟并应用后再排放。当地时间2021年4月12日,日本,航拍福岛第一核电站核污水仓。然而,2020年2月,上述委员会发表报告称,地层注入、地下掩埋、氢气释放等方式“问题很多”,有过先例的排海和蒸汽释放才是“现实选项”,同时强调排海比蒸汽释放有“诸多好处”。2021年4月,日本政府无视国内外反对意见,单方面宣布将在2023年实施核污染水排海。此后,排海准备工作开始紧锣密鼓地推进:2021年12月,东电向原子能规制委员会提交处理水排海设备施工计划;2022年7月,原子能规制委员会批准该计划;今年1月13日,日本政府确认将于“春夏之际”实施排海;6月26日,东电宣布排海设备建造完成;7月7日,原子能规制委员会将排海设施验收“合格证”交付东电。当地时间2022年3月3日,日本福岛,身穿防护服的工人正在安装从受污染的水中清除放射性物质的设备。当地时间8月24日下午,日本启动福岛第一核电站核污水排海,核污水经由1公里的海底隧道流向太平洋。当地时间2023年8月24日,日本福岛第一核电站开始将核污染水排入海洋。图文来源:新华社、央视新闻客户端、视觉中国、澎湃影像来源: https://www.thepaper.cn/newsDetail_forward_24348753
查看详情在工作中,我们经常会遇到处理多级分类的问题,我们常见的是三级,定义一个字段pid,查询的时候一级一级查询数据数据,这样也是可以解决问题。只是不够灵活,所以就有了无限极,不管有多少级菜单都能很好的快速处理。下面是PHP中无限极分类的处理方法:/** * 处理无限极分类通用方法 */ public function tree($list=[], $pk='id', $pid = 'pid', $child = '_child', $root = 0): array { // 创建Tree $tree = array(); if(is_array($list)) { // 创建基于主键的数组引用 $refer = array(); foreach ($list as $key => $data) { $refer[$data[$pk]] =& $list[$key]; } foreach ($list as $key => $data) { // 判断是否存在parent $parentId = $data[$pid]; if ($root == $parentId) { $tree[] =& $list[$key]; }else{ if (isset($refer[$parentId])) { $parent =& $refer[$parentId]; $parent[$child][] =& $list[$key]; } } } } return $tree; }$list:是直接读取数据库数据。给这个方法处理
查看详情最近在做静态页生成项目中,需要先对HTML内容进行解析数据插入和内容替换等操作,最开始想到全部用正则来解决,测试了下html结构太复杂了。全部用正则不显示。然后想到把html转成对象来操作,正好查了一下gpt,有很多库可以来解析HTML。现在用的后端语言是PHP。下面可以用的几个库1、DomDocument:这是PHP自带的内置类,可以解析和操作HTML文档,提供了许多强大的方法和函数。它的文档对象模型(DOM)适用于大多数HTML解析和替换任务。2、Simple HTML DOM:这是一个第三方库,提供了一组简单易用的方法来解析和操作HTML文档。它类似于jQuery,可以使用CSS选择器来遍历和操作HTML元素。3、PHPQuery:这是一个强大的第三方库,可以将HTML文档转换为类似于jQuery语法的对象模型。它提供了许多方便的方法和函数,使HTML解析和替换变得更加简单和灵活。4、Simplepie:这是一个针对RSS和Atom等XML文档的组件,但它也可以用于解析HTML文档。它提供了一组易用的方法和函数,用于解析和替换HTML标记和内容。最开始我用的是Simple HTML DOM,但是在使用过程中发现,某些节点内容替换不了,节点原始内容我也打印出来了,需要替换掉内容也打印出来,都没问题,就是替换不了。最终没找到原因,所以我改成用PHPQuery,同样的操作最后解决了。怎么说,使用上来说,PHPQuery要顺手一些。phpQuery库下载地址: https://code.google.com/archive/p/phpquery/downloads (需要翻墙)我下载了一份到阿里云盘,可以直接用phpQuery: https://www.aliyundrive.com/s/WCB2NR7sdCm 提取码: w01k 引入phpquery类库//直接引入 include 'phpQuery/phpQuery.php';类似laravel框架引入方法://1、首先在app目录下创建一个新的文件夹,命名libs(可自定义),在libs下再创建一个phpQuery文件夹 //2、找到根目录下的composer.json文件 //3、找到composer.json中定义的 "autoload": { "classmap": [ "database", "app/libs/phpQuery" //加上 ], "psr-4": { "App\\": "app/" } }, //composer加载文件 composer dumpautoload使用方法加载文件 newDocument<?php header("Content-Type: text/html;charset=utf-8"); require('phpQuery/phpQuery.php'); /*通过读取URL或则文件路径 返回值是该网站或文件的html,一个网页对应着一个html文件*/ /*eg 1*/ $eg1=phpQuery::newDocumentFile("test.htm"); /*eg 2*/ $eg2=phpQuery::newDocumentFile("http://www.baidu.com"); //可以通过echo htmlentities($eg1,ENT_QUOTES,"UTF-8");查看返回值。注意htmlentities()函数可以输出原始html代码。 /*eg 3*/ //读入html $html="<div> <ul> <li>第一行</li> <li>第二行</li> </ul> </div"; $eg3=phpQuery::newDocument($html);//输入入参数为html ?> 【基本选择器】 #id 根据给定的ID属性匹配单个元素。 element 根据给定的名称匹配所有符合的元素。 .class 根据给定的class匹配所有的元素。 * 选择所有元素。 selector1, selector2, selectorN 根据所有制定的选择器匹配结合结果 选择结果是取并集/* 基本选择器*/ 1) #id pq("#myDiv"); 2) element pq("div"); 3) .class pq(".myClass"); 4) * pq("*") 5) selector1,selectorN pq("div,span,p.myClass") 【层次选择器】 ancestor descendant 匹配由先祖指定的元素的后代指定的所有后代元素。 parent > child 匹配由父元素指定的子元素指定的所有子元素。 prev + next 根据指定的”next”和指定的”prev”匹配所有的下一个元素。 prev ~ siblings 匹配根据”prev” 元素的 所有相邻元素。/* 层次选择器*/ 1) ancestor descendant pq("form input") 2) parent > child pq("form > input") 3) prev + next pq("label + input") 4) prev ~ siblings pq("form ~ input")【基础过滤 】 :first 匹配第一个被选择的元素。 :last 匹配最后一个被选择的元素。 :not(selector) 匹配所有不是被选择的元素。 :even 匹配所有被选择的偶数元素,0索引。 :odd 匹配所有被选择的奇数元素,0索引。 :eq(index) 匹配等同于给定的索引的元素。 :gt(index) 匹配大于给定的索引的元素。 :lt(index) 匹配小于给定的索引的元素。 :header 匹配所有header元素,如h1,h2,h3等。 :animated 匹配正在进行动画效果的元素。/*基础过滤*/ 1) :first pq("tr:first") 2) :last pq("tr:last") 3) :not(selector) pq("input:not(:checked)") 4) :even pq("tr:even") 5) :odd pq("tr:odd") 6) :eq(index) pq("tr:eq(1)") 7) :gt(index) pq("tr:gt(0)") 8) :lt(index) pq("tr:lt(2)") 9) :header pq(":header").css("background", "#EEE"); 【内容过滤】 :contains(text) 匹配包含指定文本的元素。 :empty 匹配所有无子节点的元素(包括文本节点)。 :has(selector) 匹配至少包含一个对于给定选择器的元素。 :parent 匹配所有父元素 - 拥有子元素的,包括文本。/*内容过滤*/ 1) :contains(text) pq("div:contains('John')") 2) :empty pq("td:empty") 3) :has(selector) pq("div:has(p)").addClass("test"); 4) :parent pq("td:parent") 【属性过滤】 [attribute] 匹配给定属性的元素。 [attribute=value] 匹配给定属性等于确定值的元素。 [attribute!=value] 匹配给定属性不等于确定值的元素。 [attribute^=value] 匹配给定属性是确定值开始的元素。 [attribute$=value] 匹配给定属性是确定值结尾的元素。 [attribute*=value] 匹配给定属性包含确定值的元素。 [selector1selector2selectorN] 匹配给定属性并且包含确定值的元素。1) [attribute] pq("div[id]") 2) [attribute=value] pq("input[name='newsletter']").attr("checked", true); 3) [attribute!=value] pq("input[name!='newsletter']").attr("checked", true); 4) [attribute^=value] pq("input[name^='news']") 5) [attribute$=value] pq("input[name$='letter']") 6) [attribute*=value] pq("input[name*='man']") 7) [selector1][selectorN] pq("input[id][name$='man']") 【子元素过滤 】 :nth-child(index/even/odd/equation) 匹配所有是父元素的第n个的子元素,或者是父元素的偶数或者奇数子元素。 :first-child 匹配所有是父元素的第一个的子元素。 :last-child 匹配所有是父元素的最后一个的子元素。 :only-child 匹配所有是父元素唯一子元素的子元素。1) :nth-child(index/even/odd/equation) pq("ul li:nth-child(2)") 2) :first-child pq("ul li:first-child") 3) :last-child pq("ul li:last-child") 4) :only-child pq("ul li:only-child") 【基于表单 】 :input 匹配input, textarea, select和button元素。 :text 匹配所有类型为text的input元素。 :password 匹配所有类型为password的input元素。 :radio 匹配所有类型为radio的input元素。 :checkbox 匹配所有类型为checkbox的input元素。 :submit 匹配所有类型为submit的input元素。 :image 匹配所有类型为image的input元素。 :reset 匹配所有类型为reset的input元素。 :button 匹配所有类型为button的input元素和button元素。 :file 匹配所有类型为file的input元素。 :hidden 匹配所有类型为hidden的input元素或者其他hidden元素。1) :input pq(":input") 2) :text pq(":text") 3) :password pq(":password") 4) :radio pq(":radio") 5) :checkbox pq(":checkbox") 6) :submit pq(":submit") 7) :image pq(":image") 8) :reset pq(":reset") 9) :button pq(":button") 10) :file pq(":file") 11) :hidden pq("tr:hidden") 【表单过滤 】 :enabled 匹配所有可用元素。 :disabled 匹配所有不可用元素。 :checked 匹配所有被勾选的元素。 :selected 匹配所有被选择的元素。1) :enabled pq("input:enabled") 2) :disabled pq("input:disabled") 3) :checked pq("input:checked") 4) :selected pq("select option:selected") 【attr属性获取】 attr($name) 访问第一个给名称的元素的属性。这个方法可以很轻易地取得第一个匹配到的元素的属性值。如果这个元素没有对应名称的属性则返回undefined。 attr($properties) 对于所有匹配到的元素设置对应属性。 attr($key, $value) 对于匹配到的元素设置一个属性和对应值。 attr($key, $fn) 对于匹配到的元素设置一个属性和需要计算的值。 removeAttr($name) 对匹配到的元素移除给定名称的属性。 addClass($class) 对匹配到的元素添加一个给定的类。 hasClass($class) 如果有至少一个匹配到的元素包含给定的类则返回true。 removeClass($class) 对匹配到的元素移除给定名称的类。 toggleClass($class) 对匹配到的元素,如果类不存在则添加,如果存在则移除。1) attr pq("img")->attr("src"); 2) attr(properties) pq("img")->attr({ src: "test.jpg", alt: "Test Image" }); 3) attr(key,value) pq("img")->attr("src","test.jpg"); 4) attr(key,fn) pq("img")->attr("title", function() { return this.src }); 5) removeAttr(name) pq("img")->removeAttr("src"); 6) addClass(class) pq("p")->addClass("selected"); 7) removeClass(class) pq("p")->removeClass("selected"); 8) toggleClass(class) pq("p")->toggleClass("selected"); 【HTML获取】 html() 获取第一个匹配到的元素的html内容(innerHTML)。这个方法不适用于XML文本(但适用于XHTML。) html($val) 对匹配到的元素设置html内容。这个方法不适用于XML文本(但适用于XHTML。)1) html() pq("div")->html(); 2) html(val) pq("div")->html("<p>Hello Again</p>");【text获取】 text() 获取匹配到的所有元素的文本内容。 text($val) 对匹配到的所有元素设置文本内容。1) text() pq("p")->text(); 2) text(val) pq("p")->text("<b>Some</b> new text.");【Value 获取】 val() 获取匹配到的第一个元素的value属性的值。 val($val) 对匹配到的元素设置value值。val($val) 所有的Checks, selects, radio buttons, checkboxes,和select options都会设置相应给定的值。1) val() pq("input")->val(); 2) val(val) pq("input")->val("hello world!")【其他筛选和文档处理】\*筛选*\ 1) eq(index) pq("p")->eq(1) 2) hasClass(class) pq("div")->hasClass("protected") 3) filter(expr) pq("p")->filter(".selected") 4) filter(fn) pq("p")->filter(function($index) { return pq("ol", pq($index))->size() == 0; }); 5) is(expr) pq("input[type='checkbox']")->parent()->is("form") 6) map(callback) pq("p")->append(pq("input").map(function(){ return pq(this)->val(); })->get()->join(", ")); 7) not(expr) pq("p")->not(pq("#selected")[0]) 8) slice(start,[end]) pq("p")->slice(0, 1)->wrapInner("<b></b>"); 9) add(expr) pq("p")->add("span") 10) children([expr]) pq("div")->children() 11) contents() pq("p")->contents()->not("[@nodeType=1]").wrap("<b/>"); 12) find(expr) pq("p")->find("span") 13) next([expr]) pq("p")->next() 14) nextAll([expr]) pq("div:first")->nextAll()->addClass("after"); 15) parent([expr]) pq("p")->parent() 16) parents([expr]) pq("span")->parents() 17) prev([expr]) pq("p").prev() 18) prevAll([expr]) pq("div:last")->prevAll()->addClass("before"); 19) siblings([expr]) pq("div")->siblings() 20) andSelf() pq("div")->find("p")->andSelf()->addClass("border"); 21) end() pq("p")->find("span")->end() \*文档处理*\ 1) append(content) pq("p")->append("<b>Hello</b>"); 2) appendTo(content) pq("p")->appendTo("#foo"); 3) prepend(content) pq("p")->prepend("<b>Hello</b>"); 4) prependTo(content) pq("p")->prependTo("#foo"); 5) after(content) pq("p")->after("<b>Hello</b>"); 6) before(content) pq("p")->before("<b>Hello</b>"); 7) insertAfter(content) pq("p")->insertAfter("#foo"); 8) insertBefore(content) pq("p")->insertBefore("#foo"); 9) wrap(html) pq("p")->wrap("<div class='wrap'></div>"); 10) wrap(elem) pq("p")->wrap(pq("#content")); 11) wrapAll(html) pq("p")->wrapAll("<div></div>"); 12) wrapAll(elem) pq("p")->wrapAll(pq("#content")); 13) wrapInner(html) pq("p")->wrapInner("<b></b>"); 14) wrapInner(elem) pq("p")->wrapInner(pq(".content")); 15) replaceWith(content) pq("p")->replaceWith("<b>Paragraph. </b>"); 16) replaceAll(selector) pq("<b>Paragraph. </b>")->replaceAll("p"); 17) empty() pq("p")->empty(); 18) remove([expr]) pq("p")->remove(); 19) clone() pq("b")->clone()->prependTo("p"); 20) clone(true) pq("button")->clone(true)->insertAfter(pq("b")) 示例:$phpQueryDom=phpQuery::newDocument($html); $itemDom=$phpQueryDom->find("blockitems").eq(0); $block = ""; $blockDom =$itemDom->find('[blockitem]')->eq(0); //循环产品数据 foreach ($product as $pro){ $blockDom->find("[blocktitle]")->text($pro->title); $blockDom->find("a")->eq(0)->attr("href","/product/".$pro->id); $blockDom->find("[blockimagetype]")->attr("src",$this->getImageUrl(json_decode($pro->thumb)->url)); $blockicotypeUrl = $this->getImageUrl(json_decode($pro->icon)[0]); $blockDom->find("[blockicotype]")->attr("style","background-image:url('.$blockicotypeUrl.');background-position:center !important;"); $block.=$blockDom->htmlOuter(); } $isBlockitems = $itemDom->attr("blockitems"); //判断blockitems属性是否在当前节点上 if ($isBlockitems !== null){ $itemDom->html($block); }else{ $itemDom->find("[blockitems]")->eq(0)->html($block); }参考链接: https://blog.51cto.com/lxw1844912514/2941913 https://code.google.com/archive/p/phpquery/downloads https://www.lmlphp.com/user/57840/article/item/2351270/
查看详情今天给大家推荐一款非常优雅的思维导图,和百度脑图一样。都是基于kityminder的百度开源脑图工具。为什么使用它?1、界面非常好看,外观有很多种选择2、速度非常快,编辑也非常丝滑3、可以保存到后台个人思维脑图管理中心,不管在哪里只有有网都可以拿出电脑随时随地打开它。极大的方便了工具。4、不想让其他人访问你的思维导图,可以设置成私密,这样别人就无权访问。也可以设置成公开,让其他所有人浏览。如果只想让某一部分人查看,那你可以设置成分享。通过密码的方式分享亲朋好友查看。5、可以不用本地安装脑图工具,节省电脑硬盘和内存。不用本地打开软件6、说了那么多,主要是这款脑图开源免费,重点是免费。7、工具地址:http://www.alingfeng.cn/tools/flow下面是一些截图:后台思维导图个人管理中心外观很多,都很漂亮。大家可以自行研究喜欢哪款。
查看详情我们在生成静态页中,经常会遇到需要处理html文档,里面需要用到很多节点,插入各种动态数据,修改各种内容。我们首先想到用正则匹配内容然后修改,这样也可以的。今天我们学习一个PHP的HTML解析库,用它来处理html文档。A HTML DOM parser written in PHP - let you manipulate HTML in a very easy way! This is a fork of PHP Simple HTML DOM Parser project but instead of string manipulation we use DOMDocument and modern php classes like "Symfony CssSelector".PHP 7.0+ & 8.0 SupportPHP-FIG StandardComposer & PSR-4 supportPHPUnit testing via Travis CIPHP-Quality testing via SensioLabsInsightUTF-8 Support (more support via "voku/portable-utf8")Invalid HTML Support (partly ...)Find tags on an HTML page with selectors just like jQueryExtract contents from HTML in a single line引入:使用composer下载库composer require voku/simple_html_dom composer require voku/portable-utf8使用:use voku\helper\HtmlDomParser; require_once 'composer/autoload.php'; ... $dom = HtmlDomParser::str_get_html($str); // or $dom = HtmlDomParser::file_get_html($file); $element = $dom->findOne('#css-selector'); // "$element" === instance of "SimpleHtmlDomInterface" $elements = $dom->findMulti('.css-selector'); // "$elements" === instance of SimpleHtmlDomNodeInterface<int, SimpleHtmlDomInterface> $elementOrFalse = $dom->findOneOrFalse('#css-selector'); // "$elementOrFalse" === instance of "SimpleHtmlDomInterface" or false $elementsOrFalse = $dom->findMultiOrFalse('.css-selector'); // "$elementsOrFalse" === instance of SimpleHtmlDomNodeInterface<int, SimpleHtmlDomInterface> or false ...从url中加载html文档从字符串中加载html文档从文件中加载html文档// 新建一个Dom实例 $html = new simple_html_dom(); // 从url中加载 $html->load_file('http://www.alingfeng.cn'); // 从字符串中加载 $html->load('<html><body>从字符串中加载html文档演示</body></html>'); //从文件中加载 $html->load_file('path/file/test.html'); //创建HTML文档 // Create a DOM object from a string $html = str_get_html('<html><body>Hello!</body></html>'); // Create a DOM object from a URL $html = file_get_html('http://www.google.com/'); // Create a DOM object from a HTML file $html = file_get_html('test.htm'); 查找html元素可以使用find函数来查找html文档中的元素。返回的结果是一个包含了对象的数组。我们使用HTML DOM解析类中的函数来访问这些对象,下面给出几个示例://查找html文档中的超链接元素 $a = $html->find('a'); //查找文档中第(N)个超链接,如果没有找到则返回空数组. $a = $html->find('a', 0); // 查找id为main的div元素 $main = $html->find('div[id=main]',0); // 查找所有包含有id属性的div元素 $divs = $html->find('div[id]'); // 查找所有包含有id属性的元素 $divs = $html->find('[id]'); // 查找id='#container'的元素 $ret = $html->find('#container'); // 找到所有class=foo的元素 $ret = $html->find('.foo'); // 查找多个html标签 $ret = $html->find('a, img'); // 还可以这样用 $ret = $html->find('a[title], img[title]'); // 查找 ul列表中所有的li项 $ret = $html->find('ul li'); //查找 ul 列表指定class=selected的li项 $ret = $html->find('ul li.selected'); // 返回父元素 $e->parent; // 返回子元素数组 $e->children; // 通过索引号返回指定子元素 $e->children(0); // 返回第一个资源速 $e->first_child (); // 返回最后一个子元素 $e->last _child (); // 返回上一个相邻元素 $e->prev_sibling (); //返回下一个相邻元素 $e->next_sibling ();元素属性操作使用简单的正则表达式来操作属性选择器。[attribute] – 选择包含某属性的html元素[attribute=value] – 选择所有指定值属性的html元素[attribute!=value]- 选择所有非指定值属性的html元素[attribute^=value] -选择所有指定值开头属性的html元素[attribute$=value] 选择所有指定值结尾属性的html元素[attribute*=value] -选择所有包含指定值属性的html元素// 本例中将$a的锚链接值赋给$link变量 $link = $a->href; $link = $html->find('a',0)->href;每个对象都有4个基本对象属性:tag – 返回html标签名innertext – 返回innerHTMLoutertext – 返回outerHTMLplaintext – 返回html标签中的文本//给$a的锚链接赋新值 $a->href = 'http://www.jb51.net'; // 删除锚链接 $a->href = null; // 检测是否存在锚链接 if(isset($a->href)) { //代码 }解析器中没有专门的方法来添加、删除元素,不过可以变通一下使用:// 封装元素 $e->outertext = '<div class="wrap">' . $e->outertext . '<div>'; // 删除元素 $e->outertext = ''; // 添加元素 $e->outertext = $e->outertext . '<div>foo<div>'; // 插入元素 $e->outertext = '<div>foo<div>' . $e->outertext; $doc = $html; // 输出 echo $doc; //如何避免解析器消耗过多内存 $html->clear();简单示例:$html = file_get_html('http://www.alingfeng.cn/');//获取html $dom = new simple_html_dom(); //new simple_html_dom对象 $dom->load($html) //加载html // Find all images foreach($dom->find('img') as $element) { //获取img标签数组 echo $element->src . '<br>'; //获取每个img标签中的src } // Find all links foreach($dom->find('a') as $element){ //获取a标签的数组 echo $element->href . '<br>';//获取每个a标签中的href } $html = file_get_html('http://slashdot.org/'); //获取html $dom = new simple_html_dom(); //new simple_html_dom对象 $dom->load($html); //加载html // Find all article blocks foreach($dom->find('div.article') as $article) { $item['title'] = $article->find('div.title', 0)->plaintext; //plaintext 获取纯文本 $item['intro'] = $article->find('div.intro', 0)->plaintext; $item['details'] = $article->find('div.details', 0)->plaintext; $articles[] = $item; } print_r($articles); // Create DOM from string $html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>'); $dom = new simple_html_dom(); //new simple_html_dom对象</p><p> $dom->load($html); //加载html $dom->find('div', 1)->class = 'bar'; //class = 赋值 给第二个div的class赋值</p><p> $dom->find('div[id=hello]', 0)->innertext = 'foo'; //innertext内部文本</p><p> echo $dom;find示例:find ( string $selector [, int $index] ) // Find all anchors, returns a array of element objects a标签数组 $ret = $html->find('a');</p><p> // Find (N)th anchor, returns element object or null if not found (zero based)第一个a标签 $ret = $html->find('a', 0);</p><p> // Find lastest anchor, returns element object or null if not found (zero based)最后一个a标签 $ret = $html->find('a', -1); </p><p> // Find all <div> with the id attribute $ret = $html->find('div[id]');</p><p> // Find all <div> which attribute id=foo $ret = $html->find('div[id=foo]'); </p><p> // Find all element which id=foo $ret = $html->find('#foo');</p><p> // Find all element which class=foo $ret = $html->find('.foo');</p><p> // Find all element has attribute id $ret = $html->find('*[id]'); </p><p> // Find all anchors and images a标签与img标签数组 $ret = $html->find('a, img'); </p><p> // Find all anchors and images with the "title" attribute $ret = $html->find('a[title], img[title]');</p><p> // Find all <li> in <ul> $es = $html->find('ul li'); ul标签下的li标签数组</p><p> // Find Nested <div> tags $es = $html->find('div div div'); div标签下div标签下div标签数组</p><p> // Find all <td> in <table> which class=hello $es = $html->find('table.hello td'); table标签下td标签数组</p><p> // Find all td tags with attribite align=center in table tags $es = $html->find(''table td[align=center]'); </p><p> //5.Element //的方法 $e = $html->find("div", 0); //$e 所拥有的方法如下表所示 //Attribute Name Usage $e->tag //标签 $e->outertext //外文本 $e->innertext //内文本 $e->plaintext //纯文本 </p><p> </p><p> // Example $html = str_get_html("<div>foo <b>bar</b></div>"); echo $e->tag; // Returns: " div" echo $e->outertext; // Returns: " <div>foo <b>bar</b></div>" echo $e->innertext; // Returns: " foo <b>bar</b>" echo $e->plaintext; // Returns: " foo bar"</p><p> /6.DOM traversing 方法 //Method Description mixed$e->children ( [int $index] ) //子元素 element$e->parent () //父元素 element$e->first_child () //第一个子元素 element$e->last_child () //最后一个子元素 element$e->next_sibling () //后一个兄弟元素 element$e->prev_sibling () //前一个兄弟元素 </p><p> // Example echo $html->find("#div1", 0)->children(1)->children(1)->children(2)->id; // or echo $html->getElementById("div1")->childNodes(1)->childNodes(1)->childNodes(2)->getAttribute('id');参考链接: https://github.com/voku/simple_html_dom https://blog.csdn.net/qq_36025814/article/details/89500333
查看详情博主最近也在跟风,在网上找一些AI绘图的工具,国外国内基本都了解了一下,工具很多热门的不多,DALL·E,Midjourney,Stable Diffusion,文心一格,通义万象等。映象最深的应该还是这两个,Midjourney,Stable Diffusion,论画质,普遍Midjourney都要高一些,更加逼真,Stable Diffusion更偏向艺术和创作,当然真正的高手创作出来的图也有比Midjourney更震撼,上限很高,不喜勿喷只是个人感觉,毕竟我不是专业的。作为一个白嫖党,外加喜欢研究的我来说,Stable Diffusion才是香。网上看了一些资料,也有很多教程,然后我跟着网上的工具本地搭了一个(教程有很多),用了一些简单的模型和描述生成了一些图,总体来说,很不错,如果是设计专业的来弄,画图面应该更加好看,网上也有各种已经训练好的模型供大家使用,有兴趣的朋友可以尝试一下,主要是免费,随便造,原创。下面就分享一下网友和我生成的图,图片来自互联网和我生成的,如有涉及侵权请及时告知我删除。
查看详情今天在用shell执行PHP文件,需要读取PHP数组中的一些值的时候。遇到了问题,找了很多资料,最后问了AI。经常一翻和AI的纠缠。终于给了我正确的答案,整理如下。事实证明AI真强大。PHP文件中的数组:web_data.php<?php $web_data = [ "port"=>"10764", "secret"=>"LU2DuzNpi94Ff8jastAscGvv2HbGK2UJ", "mainDoain"=>"lxl.petuu.shop", "domain"=>"", 'mysqlUser' => "userName", 'mysqlPassword' => "gehrht1646", ]; return $web_data;shell脚本中写法:projectName=$(php -r 'include "web_data.php"; echo $web_data["mainDoain"];') echo $projectName搞定
查看详情centos下composer两种安装办法,一般用第一种就可以了。第一种#下载composer.phar文件 curl -sS https://getcomposer.org/installer | php #将composer.phar移动到环境变量中并且更名为composer mv composer.phar /usr/local/bin/composer #使用国内镜像 composer config -g repo.packagist composer https://packagist.phpcomposer.com #查看版本 composer --version第二种wget https://dl.laravel-china.org/composer.phar -O /usr/local/bin/composer chmod a x /usr/local/bin/composer
查看详情一般的平台通常都能通过自身的一个包管理工具去安装 git 的各个版本(包括当前官方最新版本),但是红帽系列通过 yum 安装却无法安装最新版本,而且都是很旧的版本,这种版本对许多新的命令以及特性都不支持,例如 switch 命令是 2.23 版本才发布的,在此之前的版本都没有,所以官方推荐像 CentOS 通过下载 git 源码包的方式去安装我们去阿里云下载git,找到版本,直接wget https://mirrors.edge.kernel.org/pub/software/scm/git/ 注意:直接 copy 下载地址,使用 wget 进行下载的时候,需要加上选项 --no-check-certificatewget --no-check-certificate https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz 接下来我们按照步骤进行安装就可以#安装前首先得安装依赖环境 yum install -y perl-devel #解压 tar -zxf git-2.9.5.tar.gz cd git-2.9.5 # 检查环境,配置安装路径 #编译安装 ./configure --prefix=/usr/local/git make && make install #添加到系统环境变量 vim ~/.bashrc #添加这一行 export PATH="/usr/local/git/bin:$PATH" #重载配置 source ~/.bashrc #查看版本 git version 就安装好了。
查看详情人的血液7年会全部替换一遍,鱼的记忆只有7秒。