<?php
ob_start();
?>
<p id="name"> 与左边的右尖括号有一个空格喔 与右边的左尖括号有两个空格喔 </a>
<p> 与左边的右尖括号有三个空格喔</a>
<p>只与右边的左尖括号有四空格喔 </a>
<p>两边没有空格 但是中间有空格喔</a>
<?php
//过滤换行,删除左尖括号左边的空格,去掉右尖括号右边的空格,但是不过滤连续字符串中的空格
$text = str_replace(PHP_EOL, '', ob_get_flush());//过滤缓存的换行
//$pattern1 = '/(?<=\>)([\s]+)(?=\<)/i';//匹配标签之间所有的空格
//网上有人说这个正则表达式除了可以去掉标签与标签之间的空格之外还可以过滤标签和文本之间的空格,但是经过反复测试,只能清除标签之间所有的空格,并不能去掉标签与文本之间的空格,要实现即过滤标签之间的空白又要删除标签与文本之间的空白还需要通过下面的两个表达式配合来实现
//匹配左尖括号左边空格
$pattern2 = '/(?<=[^\s])([\s]+)(?=<)/';
//匹配右尖括号右边空格
$pattern3 = '/(?<=>)([\s]+)(?=[^\s])/';
//如果匹配替换之后中文出现乱码,需对字符串用urlencode编码与urldecode解码处理
//$pattern2 = '/(?<=[^\+])([\+]+)(?=%3C)/';//匹配左尖括号左边空格
//$pattern3 = '/(?<=%3E)([\+]+)(?=[^\+])/';//匹配右尖括号右边空格
//$text=urlencode($text);//空格的url编码是+,左尖括<是%3C,右尖括>是%3E
//下面是从缓存中获取的数据然后编码之后的结果
//$str = "%3Cp+id%3D%22name%22%3E+%E4%B8%8E%E5%B7%A6%E8%BE%B9%E7%9A%84%E5%8F%B3%E5%B0%96%E6%8B%AC%E5%8F%B7%E6%9C%89%E4%B8%80%E4%B8%AA%E7%A9%BA%E6%A0%BC%E5%96%94++%E4%B8%8E%E5%8F%B3%E8%BE%B9%E7%9A%84%E5%B7%A6%E5%B0%96%E6%8B%AC%E5%8F%B7%E6%9C%89%E4%B8%A4%E4%B8%AA%E7%A9%BA%E6%A0%BC%E5%96%94++%3C%2Fa%3E%3Cp%3E+++%E4%B8%8E%E5%B7%A6%E8%BE%B9%E7%9A%84%E5%8F%B3%E5%B0%96%E6%8B%AC%E5%8F%B7%E6%9C%89%E4%B8%89%E4%B8%AA%E7%A9%BA%E6%A0%BC%E5%96%94%3C%2Fa%3E%3Cp%3E%E5%8F%AA%E4%B8%8E%E5%8F%B3%E8%BE%B9%E7%9A%84%E5%B7%A6%E5%B0%96%E6%8B%AC%E5%8F%B7%E6%9C%89%E5%9B%9B%E7%A9%BA%E6%A0%BC%E5%96%94++++%3C%2Fa%3E%3Cp%3E%E4%B8%A4%E8%BE%B9%E6%B2%A1%E6%9C%89%E7%A9%BA%E6%A0%BC+++%E4%BD%86%E6%98%AF%E4%B8%AD%E9%97%B4%E6%9C%89%E7%A9%BA%E6%A0%BC%E5%96%94%3C%2Fa%3E";
//echo $text;
preg_match_all($pattern2,$text, $match2);
preg_match_all($pattern3,$text, $match3);
echo "<pre>";
print_r($match2);//这里匹配到的是左边尖括号的二个与四个空格
print_r($match3);//这里匹配到的是左边尖括号的一个与三个空格
$text=preg_replace($pattern2,"",$text);
$text=preg_replace($pattern3,"",$text);
//url解码
//$text=urldecode($text);
echo $text;
exit;
?>
如果对上面的正则表达式看不明白,请看下面的两种匹配模式的说明,是从百度百科中摘录下来的,希望对你理解非获取匹配有所帮助!
(?<=pattern)
非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
(?=pattern)
非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
注意事项:
如果一个正则表达式中即有正向肯定预查也有反向肯定预查时,反向肯定预查在前面,正向肯定预查只能在后面,就比如匹配右尖括号右边空格的正则表达式正确的是'/(?<=%3E)([\+]+)(?=[^\+])/',而不能是'/(?=%3E)([\+]+)(?<=[^\+])/'
为了更好的理解以上的几个非获取匹配,再链接数据库测试下面的代码
//防止操作另外一个子网站的数据开始
$result = mysqli_query($GLOBALS["conn"], "show tables like '".WebConfig::prefix."%'");
$tables = array();
while ($currow = mysqli_fetch_array($result)) {
$tables[] = $currow[0];
}
mysqli_free_result($result);
$newTables = array();
foreach ($tables as $value) {
$newTables[] = str_replace(WebConfig::prefix, "", $value);
}
foreach ($newTables as $value) {
//$pattern = "/\s+`?([a-z]+_".$value.")`?\s*?\(?/i";//\s+匹配至少一次空格 `?匹配`零次或一次 [a-z]+匹配字母至少一次 \s*?是匹配空格任意多次,后面的?表示是非贪婪匹配,(?匹配左括号零次或一次
//非获取匹配
$pattern = "/(?!\s+`?)([a-z]+_".$value.")(?=`?\s*?\(?)/i";//有结果 推荐这个,下面判断的时候用if($match[0])
//$pattern = "/(?!\s+`?)([a-z]+_".$value.")(?:`?\s*?\(?)/i";//有结果
//$pattern = "/(?!\s+`?)([a-z]+_".$value.")(?!`?\s*?\(?)/i";//无结果
//$pattern = "/(?!\s+`?)([a-z]+_".$value.")(?<=`?\s*?\(?)/i";//出错
//$pattern = "/(?!\s+`?)([a-z]+_".$value.")(?<!`?\s*?\(?)/i";//出错
preg_match_all($pattern,$exe,$match);
//pr($match);
if($match[0])
{
if($match[0][0]!=WebConfig::prefix.$value){
echo "非法操作其它网站表";
exit;
}
}
}
过滤html标签与标签之间的空格以及标签和内容之间的空格
所属栏目:建站技术 更新时间:2020-10-30 点击: 次 文章来源:http://www.sznest.net/jzjs/3525.html
【上一篇】:ueditor与umeditor编辑器的各浏览器的问题汇总
【下一篇】:如何修改文件默认打开方式为指定的程序?
相关阅读
-
如何更换本机DNS
计算机上网需要dns解析域名方可将域名和空间服务器上内容对应起来,所以能上网的计算机都要配置一个dns进行解析域名。不同网络不同地区使用的dns各不相同的,而这个dns是由您当前网络供应商提供,更改本机DNS可以测试域名解析和网站访问(通过以下操作后,域名解析正常,可以ping到域名对应的ip,以及网站可以正常访问,说明您本地网络供应商提供给您计算机上网的d…
了解详情 >>
-
asp用正则批量替换过滤表中所有行的内容中的图片
SetHF=NewRegExp'建立正则表达式。HF.Pattern="《img[^>]*>"'设置模式、《请替换成英文的左尖括号。HF.IgnoreCase=True'设置是否区分字符大小写。HF.Global=True'设置全局可用性。Setconn=Server.CreateObject(…
了解详情 >>
-
删除bom标签或者bom头的php代码
有时程序的逻辑代码完全没有一问题,但是就是运行的时候出错,如果出现这种情况,那么有可能就是文件中包含了bom头所导致的,下面给出了php去除bom头的源代码,只要把下面的代码放到一个php的文件中,并且改好目录,然后运行那个文件就可以了//此文件用于快速测试UTF8编码的文件是不是加了BOM,并可自动移除=".";//修改此行为需要检测的…
了解详情 >>
-
TP5请求信息与请求参数
<?phpnamespaceappindexcontroller;usethinkController;usethinkRequest;classIndexextendsController{publicfunctionindex(){//index/index/index/name/zs/age/18/sex/nan//使用函数助手不需要usethi…
了解详情 >>
-
FTP上的文件不宜在线编辑
知道FTP软件使用的都知道,打开软件登录某一空间后,一边是本地的文件,另一边是服务器上的文件,而FTP软件就是连接本地与虚拟主机的桥梁,因为有了该软件,线上线下的上传下载就显得非常的简单。一般情况下,如果要对服务器上的文件进行修改,可以先将其下载到本地,再用dr将其打开进行编辑,待编辑到满意后,再上传上去,覆盖以前的文件,或是将以前的文件改个名字,直接上传上…
了解详情 >>
-
如何解决QQ显示未启用的问题
没设置临时会话,一般都会出现下面的状况。QQ放在网站上作为客服,必须设置临时会话。或者点击之后,要求加为好友才可以对话。解决这个问题的步骤如下:一、登陆腾讯官方网站:http://wp.qq.com/二、登陆之后,点“设置”,按下图所示,全部打勾。这个必须设置,不设置,不能临时会话,就会显示“未启用”。这一步是关键,必须设置。(1)先看服务有没被停用:如停用…
了解详情 >>