-6

私は現在、フォームのテキストを含むいくつかのフィールドを持つデータベースを持っています

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

Webページに表示すると、出力は次のようになります。

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; ?>でPHPコードを実行しないでください$page->text。ただし、その中のPHPコードは、ブラウザによって処理命令として解釈される場合があります。これを修正するには、HTMLとしてエスケープする必要があります。

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

の詳細についてはhtmlspecialcharsドキュメントを参照してください

于 2013-01-06T21:45:58.750 に答える
1

文字列内の変数に独自の構文を導入して実行str_replace(または正規表現を使用) して、それらを実際の値に置き換えることができます。

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

申し訳ありませんが、私はばかで、慎重に対処するために残されているコードを十分に読んでいませんでした。置換が PHP によって自動的に行われたわけではないという点であなたはすべて正しいですが、何らかの理由で前の著者は使用することを考えていましたstr_replace("<?=\$GLOBALS['root']?>", $GLOBALS['root'], mysql_result($result, 0, "text"));...

お時間を無駄にして申し訳ありません。

于 2013-01-06T21:53:26.077 に答える
0

eval()データベースから任意のコードを実行する機能が欲しいと思います。ただし、文字列から任意のコードを実行することはお勧めしません。

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

それらをサポートしていない<?ので、の問題はなくなります。eval()

于 2013-01-06T21:46:03.180 に答える
0

二重引用符( "")を使用します。データをDBに入れるには、PDOなどの抽象化レイヤーを使用します。 http://php.net/manual/en/book.pdo.php

于 2013-01-06T21:44:52.103 に答える