ホームページ  >  記事  >  バックエンド開発  >  ThinkPHP データベースにおける 2 つのバックスラッシュ エスケープとデータベース クラス エスケープの解決策、thinkphp スラッシュ_PHP チュートリアル

ThinkPHP データベースにおける 2 つのバックスラッシュ エスケープとデータベース クラス エスケープの解決策、thinkphp スラッシュ_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:15:151260ブラウズ

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


tru​​e

http://www.bkjia.com/PHPjc/906108.html

技術記事

ThinkPHP がデータベースに入力されるときの 2 つのバックスラッシュ エスケープとデータベース クラス エスケープの解決策 この記事の thinkphp スラッシュの例は、ThinkPHP がデータベースに入力されるときの 2 つのバックスラッシュ エスケープとデータベース クラス エスケープの解決策を示しています。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。