$str=preg_replace("/[attach]/is","111",$str); 这一句如何把111替换成可以执行的PHP代码

WBOY
Freigeben: 2016-06-23 13:50:53
Original
890 Leute haben es durchsucht

$str=preg_replace("/\[attach\]/is","111",$str);  这一句如何把111替换成可以执行的PHP代码

比如$str=preg_replace("/\[attach\]/is","$str=preg_replace(" width="280"/>",$str);  结果出来后成字符了


回复讨论(解决方案)

$message=preg_replace("/\[url\](http:[^\]]*?)\[\/url\]/ies","_cuturl('\\1')",$message);function _cuturl($msg){	$new=cutstr($msg,20);	return $new;}
Nach dem Login kopieren

在正则后面加符号/e,就可以调用函数,在里面就可以执行php的操作

$str=preg_replace("/\[attach\]/is","$str=preg_replace(",$str);

这个是BBCODE的PHP替换。你应该是想实现类似DISCUZ的那种附件BBCODE。
要想回调可以使用 preg_replace_callback。

<?php //author: default7<default7#zbphp.com$str = preg_replace_callback("/\[attach\](\d+)\[\/attach\]/isUe",function($attachId = 0){	//todo 	$row = $db->query("select * from tb where id=$id ")->row();	return '<img  src="'.$row['pic'].'" / alt="$str=preg_replace("/[attach]/is","111",$str); 这一句如何把111替换成可以执行的PHP代码" >';},$str);
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

原理如上,具体代码自己测试一下。



这个是BBCODE的PHP替换。你应该是想实现类似DISCUZ的那种附件BBCODE。
要想回调可以使用 preg_replace_callback。

<?php //author: default7<default7#zbphp.com$str = preg_replace_callback("/\[attach\](\d+)\[\/attach\]/isUe",function($attachId = 0){	//todo 	$row = $db->query("select * from tb where id=$id ")->row();	return '<img  src="'.$row['pic'].'" / alt="$str=preg_replace("/[attach]/is","111",$str); 这一句如何把111替换成可以执行的PHP代码" >';},$str);
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

原理如上,具体代码自己测试一下。



修正:
$str = preg_replace_callback("/\[attach\]\s*(\d+)\s*\[\/attach\]/isUe",function($match){	//todo 	$id = $match[1];	$row = $db->query("select * from tb where id=$id ")->row();	return $row ? '<img  src="'.$row['pic'].'" / alt="$str=preg_replace("/[attach]/is","111",$str); 这一句如何把111替换成可以执行的PHP代码" >' : '';},$str);
Nach dem Login kopieren
Nach dem Login kopieren

$str=preg_replace("/\[attach\]/is","$str=preg_replace(",$str)


这个是BBCODE的PHP替换。你应该是想实现类似DISCUZ的那种附件BBCODE。
要想回调可以使用 preg_replace_callback。

<?php //author: default7<default7#zbphp.com$str = preg_replace_callback("/\[attach\](\d+)\[\/attach\]/isUe",function($attachId = 0){	//todo 	$row = $db->query("select * from tb where id=$id ")->row();	return '<img  src="'.$row['pic'].'" / alt="$str=preg_replace("/[attach]/is","111",$str); 这一句如何把111替换成可以执行的PHP代码" >';},$str);
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

原理如上,具体代码自己测试一下。



修正:
$str = preg_replace_callback("/\[attach\]\s*(\d+)\s*\[\/attach\]/isUe",function($match){	//todo 	$id = $match[1];	$row = $db->query("select * from tb where id=$id ")->row();	return $row ? '<img  src="'.$row['pic'].'" / alt="$str=preg_replace("/[attach]/is","111",$str); 这一句如何把111替换成可以执行的PHP代码" >' : '';},$str);
Nach dem Login kopieren
Nach dem Login kopieren




出现错误提示:Parse error: syntax error, unexpected T_FUNCTION in
指向$str = preg_replace_callback("/\[attach\]\s*(\d+)\s*\[\/attach\]/isUe",function($match){这一行

你的 php 版本是多少?

php5.2

function get($id) {  //$value = 这里是相关操作的代码  return $value;}$str = preg_replace("/\[(attach)\]/ise", "get('$1')", $str);
Nach dem Login kopieren

也可以
function get($r) {  //$value = 这里是相关操作的代码  return $value;}$str = preg_replace_callback("/\[(attach)\]/is", "get", $str);
Nach dem Login kopieren



dz的手机版不显示图片,所以我想自己写一个 显示人页面。

function get($r) {  $value = SELECT * FROM `bbs_forum_attachment_$row[tableid]` where tid =id  return $value;}$str = preg_replace_callback("/\[(attach)\]/is", "get", $str);
Nach dem Login kopieren


where tid =id 这个ID如何得到

你 print_r($r) 就可看到

你 print_r($r) 就可看到



function get($r) {  $value = "SELECT * FROM `bbs_forum_attachment_9` where tid =$r"  return $value;}$str = preg_replace_callback("/\[(attach)\]/is", "get", $str);
Nach dem Login kopieren


错误提示:Parse error: syntax error, unexpected T_RETURN

第二行的结尾分号少写了。

第二行的结尾分号少写了。



呵呵;我改成
function get($r) {  $value = "SELECT * FROM `bbs_forum_attachment_9` where tid =$r";  return $value;}$str = preg_replace_callback("/\[(attach)\]/is", "get", $str);
Nach dem Login kopieren

可是前天输出
SELECT * FROM `bbs_forum_attachment_9` where tid =Array26588

我想要的是SELECT * FROM `bbs_forum_attachment_9` where tid =26588 不要Array  怎么弄

我改成单引号前台输出 SELECT * FROM `bbs_forum_attachment_9` where tid =$r

是不是这段php语句没有执行,直接转成文本了

26588 从哪里来的? 在get方法里面 print_r($r); 得到什么?

改成$str = preg_replace_callback("/\[attach\](.+?)\[\/attach\]/is", "get", $str);  之后

输出:SELECT * FROM `bbs_forum_attachment_9` where tid =Array

26588 从哪里来的? 在get方法里面 print_r($r); 得到什么?




在get方法里面 print_r($r); 得到 值是  1

26588应该是第一次没有过滤干净

看不懂了,print_r($r); 怎么可能是1呢?

php5.2



忘了写明,我写的那个要 PHP 5.5+ 

php5.2    怎么写呢

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage