ThinkPHP データベースにおける 2 つのバックスラッシュ エスケープとデータベース クラス エスケープの問題の解決策、thinkphp スラッシュ
この記事の例では、ThinkPHP がデータベースにインポートされるときの 2 つのバックスラッシュ エスケープとデータベース クラス エスケープの解決策について説明します。参考のためにみんなで共有してください。具体的な方法は以下の通りです
これは、magic_quotes_gpc がオンになっている場合に発生します。その理由は、thinkphp がデータベースにインポートするときに magic_quotes_gpc がオンになっているかどうかを判断せず、それに関係なくエスケープしたためです。
解決策は、次のコードをエントリ ファイルに追加することです:
コードをコピーします コードは次のとおりです:
if (!get_magic_quotes_gpc()) {
関数 addlashes_deep($value) {
$value = is_array($value) ?
array_map('addslashes_deep', $value):
まつげを追加します($value);
$value を返します。
}
$_POST = array_map('addslashes_deep', $_POST);
$_GET = array_map('addslashes_deep', $_GET);
$_COOKIE = array_map('addslashes_deep', $_COOKIE);
$_REQUEST = array_map('addslashes_deep', $_REQUEST);
}
誰かが DbMysql.class.php のエスケープ関数を次のように変更しました:
コードをコピーします
コードは次のとおりです:
public functionescape_string($str) {
if (get_magic_quotes_gpc()) {
$str を返します。
}
if($this->_linkID) {
return mysql_real_escape_string($str,$this->_linkID);
}その他{
mysql_escape_string($str) を返す
}
}
実際、この方法はお勧めできません。なぜなら、マジック関数がオンで $str が post または get (テキストやデータベースの読み取りなど) によって取得されない場合でも、バックスラッシュは追加されないからです。
したがって、$str がエスケープされているかどうかに関係なく、常に最初にエスケープを削除してからエスケープを追加します。これにより、二重エスケープやエスケープの欠落を回避できます。
変更方法は次のとおりです:
コードをコピーします
コードは次のとおりです:
public functionescape_string($str) {
$str = ストリップスラッシュ($str);
if($this->_linkID) {
return mysql_real_escape_string($str,$this->_linkID);
}その他{
mysql_escape_string($str) を返す
}
}
この記事で説明した内容が、皆様の ThinkPHP フレームワーク プログラミングに役立つことを願っています。
Thinkphp のデータベースに書き込まれる二重引用符の一部がエスケープされないのはなぜですか?
それはデータベースとは関係がありません。PHP の挿入ステートメントに関係しています。意味が変わったものもあれば、そうでないものもあるはずです。
エスケープせずに挿入することさえできず、エラーが報告されます
しかし、一重引用符は依然として不快です。意味を変更するには、追加の一重引用符を追加する必要があります
http://www.bkjia.com/PHPjc/906108.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/906108.html
技術記事
ThinkPHP がデータベースに入力されるときの 2 つのバックスラッシュ エスケープとデータベース クラス エスケープの解決策 この記事の thinkphp スラッシュの例は、ThinkPHP がデータベースに入力されるときの 2 つのバックスラッシュ エスケープとデータベース クラス エスケープの解決策を示しています。