をチェックするためにこれらのものを使用しようと、私は問題を発見した - それは事故を起こしたリルート機能でした。より具体的には、システムコアのルートフォルダ内のセグメントフィルタリング機能。
私はエンコードされた値(:-)カンマ)でアンカーを作成し、私は私のコントローラに持っていた機能にURIを再ルーティングするルートを設定した:
これは何が起こったかです。リンクをクリックするたびに、値が渡され、(おそらく)関数に再ルーティングされます。それは、私が使ったほとんどすべての価値に対して、そうしました。これを除いて。
第1の仮定:dbクエリ関数は値をエスケープしています。しかし、私はエスケープをオフにし、印刷でクエリをチェックしました。値は正しい。私はその後、他のクエリフォーマットを試みましたが、まだ結果はありません。結論:データベースクエリ関数には何も問題はありません。
第2の前提:データが壊れている必要がありますが、値は正しいですが(私はコンマを得ています:-))、手動で値を入力するとき以外は何も戻っていません。だから私はこれをテストしました: 私は別の値を作成し、それが私が入力したもの(動作するもの)と等しくなるように設定しました。私はVAR_DUMPを使って元の値(1つを渡した)と新しく作成した値を表示しました。 引数の値(動作しないもの)は、長さが14の文字列ですが、新しい変数は長さが10の文字列でした。結論:変数を変更した再ルーティング/通過プロセス中に何かが発生しました。
私はconfigフォルダに戻って、リルートの変数$ iをリテラル文字列値のカンマに置き換えました:-)。そして、何を推測する?それは完璧に働いた。正規表現ではないことを確認するために、私は独自のカスタム正規表現を書いても問題はありませんでしたが、値はまだ変更されていました。だから私はボンネットの下に入ることに決めました。
ルートクラスのURI操作を_explode_segment()関数にトレースしました。これは正規表現を実行し、他の変数のURIを分析するために使用されました。それはまた...
_filter_uri($ strの)マッチしたURIセグメントの各部分の
この事をしました。
何をしましたか?これは、(と)のようなプログラム可能な文字をHTML ENTITYに置き換えます。今、あなたがわからないなら、htmlエンティティはURLのエンコーディングよりも長い長さを持っています。笑。何が起こったのかはこれでした:
オリジナルセグメント:コンマ - %3A-%29 < - とても素敵! フィルタ処理されたセグメント:コンマ - %3A-)< - NOOOOOOOOO! (右の括弧は、&#41で符号化された。)
urldecode(」&#41 ")=列(4) urldecode(" %29" )の文字列(1)
失敗=。
またはWIN ?!
アクティブクエリを実行して違いがあるかどうか確認しましたか? '$ this-> db-> get_where( 'variables'、array( 'value' => $ value));' – Jakub
私はちょっと試しました。私は、クエリを印刷し、それでも正常に動作します。 Hm。 – Kira