我目前有一个数据库,其中包含一些包含
形式文本的字段 The root location is <?=$GLOBALS['root']?>
,
这个想法是,当在网页上显示输出
时 The root location is /random/directory/that/changes/
。
问题是我还想要一个可以编辑这些字段的页面,所以我需要把
The root location is <?=$GLOBALS['root']?>
进入textarea。不幸的是,像
这样的代码<textarea><?echo $page->text?></textarea>
执行您期望的操作并将<?=$GLOBALS['root']?>
的任何内容更改为/ random / directory / that / changes /。我知道有可能这样做,因为phpmyadmin这样做,但我已经看过他们的代码并且无法确定他们是如何完成它的。据我所知,没有任何常见的逃逸功能可以自行解决问题,正如我所预料的那样。
P.S。我意识到将PHP代码放入这样的数据库并不是最好的想法,但我现在已经坚持了。
编辑:对不起,我是个傻瓜。请忽略这个问题。有关详细信息,请参阅下面的答案。答案 0 :(得分:2)
<?php echo $page->text; ?>
不应该在$page->text
中执行PHP代码。但是,其中的PHP代码可能被浏览器解释为processing instruction。要解决这个问题,您需要将其转义为HTML:
<?php echo htmlspecialchars($page->text); ?>
有关htmlspecialchars
,see the documentation。
答案 1 :(得分:1)
您可以在字符串中引入自己的变量语法并运行str_replace
(或使用正则表达式)将它们替换为实际值:
$variables = array(
'root' => '/random/directory/that/changes/'
};
$string = str_replace('{$root}', $variables['root'], $string);
答案 2 :(得分:1)
对不起,我是个白痴,并没有仔细阅读我留下来处理的代码。你是完全正确的,因为替换不是由PHP自动完成的,但出于某种原因,前一位作者认为使用str_replace("<?=\$GLOBALS['root']?>", $GLOBALS['root'], mysql_result($result, 0, "text"));
......
抱歉浪费你的时间。
答案 3 :(得分:0)
使用双引号(“”)。 要将数据放入DB,请使用一些抽象层,例如PDO。 http://php.net/manual/en/book.pdo.php
答案 4 :(得分:0)
我认为你想要的是从数据库中执行任意代码的eval()
函数。但是,不建议从字符串执行任意代码。
http://php.net/manual/en/function.eval.php
<?
的问题消失了,因为eval()
不支持这些问题。