问:我不是在页面上其他单词内搜索被禁止的单词,而是在已加载页面内搜索被禁止的单词。
我实际上不是在其他字词中而是页面(元标记,内容)中寻找被禁词。
因此,如果我要查找“公鸡”一词,则“公鸡”一词不应触发过滤器。
我刚刚测试了这段代码,是的,正如预期的那样,该代码可以正常工作,但是您可以猜测,有很多cpu电源循环运行。页面加载的一瞬间,另一分钟变成灰色,并显示出页面加载时间过长的迹象。而所有这些都在本地主机上。现在,我可以想象我的虚拟主机会做什么!
所以现在,我们将不得不提出一个更好的解决方案。有任何想法吗 ?
我们如何不让脚本在加载的页面上检查所有禁止的单词?当找到1个被禁止的单词并回显了哪个被禁止的单词以及页面上的位置后,我们如何停止脚本?(元标记,正文内容等)。
有任何代码建议吗?
这是到目前为止我得到的:
码:
<?php
/ *
错误处理
* /
// 1)。$ curl将成为数据类型curl资源。
$ curl = curl_init ();
// 2)。设置cURL选项。
curl_setopt ($ curl , CURLOPT_URL , 'https: //www.buzzfeed.com/mjs538/the-68-words-you-cant-say-on-tv?utm_term=.xlN0R1Go89#.pbdl8dYm3X ' );
curl_setopt ($ curl , CURLOPT_SSL_VERIFYPEER , false );
curl_setopt ($ curl , CURLOPT_RETURNTRANSFER , true );
// 3)。运行cURL(执行http请求)。
$ result = curl_exec ($ curl );
$ response = curl_getinfo ( $ curl );
如果( $ response [ 'http_code' ] == '200' )
{
//设置禁止的单词。
$ banned_words = array (“ Prick” ,“ Dick” ,“ ***” );
//分隔在cURL获取页面上找到的每个单词。
$ word = explode (“” , $ result );
// var_dump($ word);
对于($ i = 0 ; $ i <= count ($ word ); $ i ++)
{
foreach ($ banned_words 作为 $ ban )
{
if (strtolower ($ word [ $ i ]) == strtolower ($ ban ))
{
echo “ word:$ word [$ i] <br />” ;
echo “匹配:$ ban <br>” ;
}
其他
{
echo “ word:$ word [$ i] <br />” ;
echo “没有匹配项:$ ban <br>” ;
}
}
}
}
// 4)。关闭cURL资源。
curl_close ($ curl );
[/码]
我被告知要这样做:
**将页面加载到字符串中。
在加载的字符串上使用带有“单词边界”的preg_match,并循环浏览被禁止的单词。**
这是更新:
[码]
<?php
/ *
错误处理
* /
声明( strict_types = 1 );
ini_set ('display_errors' , '1' );
ini_set ('display_startup_errors' , '1' );
error_reporting ( E_ALL );
mysqli_report ( MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );
// 1)。设置禁止的单词。
$ banned_words = array (“ Prick” ,“ Dick” ,“ ***” );
// 2)。$ curl将成为数据类型curl资源。
$ curl = curl_init ();
// 3)。设置cURL选项。
curl_setopt ($ curl , CURLOPT_URL , 'https://www.buzzfeed.com/mjs538/the-68-
话-
您不能在电视上说?utm_term = .xlN0R1Go89#.pbdl8dYm3X' );
curl_setopt ($ curl , CURLOPT_SSL_VERIFYPEER , false );
curl_setopt ($ curl , CURLOPT_RETURNTRANSFER , true );
// 4)。运行cURL(执行http请求)。
$ result = curl_exec ($ curl );
$ response = curl_getinfo ( $ curl );
如果($ response [ 'http_code' ] == '200' )
{
$ regex = '/ \ b' ; //正则表达式字符串语法的开头
$ regex 。= implode ('\ b | \ b' , $ banned_words ); //使用正确的正则表达式语法将所有禁止的单词连接到字符串
$ regex 。= '\ b / i' ; //在正则表达式语法中添加结尾。最后我使它不区分大小写
$ substitute = '****' ;
$ cleanresult = preg_replace ($ regex , $ substitute , $ result );
回声 $ cleanresult ;
}
curl_close ($ curl );
?>
答:我的记事本++中出现自动换行问题。现在排序。
此编辑的代码正在运行。
[代码]
<?php
/ *
错误处理
* /
// 1)。设置禁止的单词。
$ banned_words = array(“ blow”,“ nut”,“ asshole”);
// 2)。$ curl将成为数据类型curl资源。
$ curl = curl_init();
// 3)。设置cURL选项。
curl_setopt($ curl,CURLOPT_URL,'https://www.buzzfeed.com/mjs538/the-68-words-you-cant-say-on-tv?utm_term=.xlN0R1Go89#.pbdl8dYm3X');
curl_setopt($ curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ curl,CURLOPT_RETURNTRANSFER,true);
// 4)。运行cURL(执行http请求)。
$ result = curl_exec($ curl);
如果(curl_errno($ curl)){
回声'错误:'。curl_error($ curl);
}
$ response = curl_getinfo($ curl);
if($ response ['http_code'] =='200')
{
$ regex ='/ \ b';
$ regex。= implode('\ b | \ b',$ banned_words);
$ regex。='\ b / i';
$ substitute ='****';
$ cleanresult = preg_replace($ regex,$ substitute,$ result);
回声$ cleanresult;
}
curl_close($ curl);
?>
[/ code]