-6

我目前有一个数据库,其中一些字段包含表单的文本

The root location is <?=$GLOBALS['root']?>,

这个想法是,当显示在网页上时,输出是

The root location is /random/directory/that/changes/.

问题是我还想要一个可以编辑这些字段的页面,所以我需要把

The root location is <?=$GLOBALS['root']?>

进入文本区域。不幸的是,像这样的代码

<textarea><?echo $page->text?></textarea>

做你所期望的并将任何发生的事件更改<?=$GLOBALS['root']?>为 /random/directory/that/changes/。我知道可以像 phpmyadmin 那样做到这一点,但我看过他们的代码,并不能完全弄清楚他们是如何做到的。据我所知,没有任何常用的转义函数可以解决问题,正如我所预料的那样。

PS我意识到将PHP代码放入这样的数据库并不是最好的主意,但我现在有点坚持。

编辑:对不起,我是个傻瓜。请忽略这个问题。有关更多详细信息,请参阅下面的答案。

4

5 回答 5

2

<?php echo $page->text; ?>不应该在$page->text. 但是,其中的 PHP 代码可能会被浏览器解释为处理指令。要解决此问题,您需要将其转义为 HTML:

<?php echo htmlspecialchars($page->text); ?>

有关详细信息htmlspecialchars请参阅文档

于 2013-01-06T21:45:58.750 回答
1

对不起,我是个白痴,没有仔细阅读我留下来处理的代码。你是正确的,替换不是由 PHP 自动完成的,但由于某种原因,前作者认为使用str_replace("<?=\$GLOBALS['root']?>", $GLOBALS['root'], mysql_result($result, 0, "text"));......

很抱歉浪费您的时间。

于 2013-01-06T21:53:26.077 回答
1

您可以为字符串中的变量引入自己的语法并运行str_replace(或使用正则表达式)以将它们替换为实际值:

$variables = array(
  'root' => '/random/directory/that/changes/'
};
$string = str_replace('{$root}', $variables['root'], $string);
于 2013-01-06T21:49:48.130 回答
0

使用双引号(“”)。要将数据放入数据库,请使用一些抽象层,例如 PDO。 http://php.net/manual/en/book.pdo.php

于 2013-01-06T21:44:52.103 回答
0

我认为您想要的是eval()从数据库执行任意代码的功能。但是,不建议从字符串执行任意代码。

http://php.net/manual/en/function.eval.php

问题<?消失了,因为eval()不支持这些。

于 2013-01-06T21:46:03.180 回答