2016-10-26 2 views
0

私はTinyMCEを使ってphpMyAdminのSQLテーブルにいくつかのHTMLを保存しています。表から行を挿入して検索すると問題はありません。データベース内のHTMLの正しい書式設定

私は正規表現を使用して、検索されたテキストの一部の短いコードを翻訳しています。これが問題の発生場所です。

これは単に可能htmlタグと新しいラインを持つ2つのショートコードの間のテキストを取得し、私の正規表現、である:私はDBからHTMLを取得し、その上で正規表現を実行すると

/(<.+>)?[[]{$code}[]](<\/.+>)?((?:\n.+\n?)+)(<.+>)?[[]{$code}[]](<\/.+>)?/

preg_match_all()は何も一致しませんが、データベースの行をダブルクリックしてインラインエディタを開くと、phpMyAdminは何かを実行して行を自動的に更新し、テキストを新しい値に設定します;次に、私が新しい値で正規表現を実行すると、preg_match_all()が正しい値と一致します。

私は変換テキストなどの自動エンコードを行っていると思っていましたが、挿入する前にmb_detect_encoding()をHTML上で実行していたのですが、エンコードがUTF-8であることが確認されています(utf8_unicode_ci)。

私はメモ帳+ +で更新前後のテキストとEOL文字を比較して、それらはまったく同じですが、phpMyAdminが更新する前に私の正規表現は機能しません。

テキストを修正するためにphpMyAdminとは何ですか、そしてそれがデータベースに挿入される前にそれを行うにはどうすればよいですか?行を自動的に更新するのはなぜですか?

+0

私があなただったらDBに保存する前に$ _SESSIONの値を保存しておくと、PHPMyAdminで更新が行われた後に新しい値が取得され、比較されます。たぶんstrlen()を使って、htmlspecialchars()を使って...各文字をord()で置き換えても...私は大声で考えています。 P.S.いくつかのコードを表示したり、jsfiddleを提供することができれば、私たちがあなたを助けるのが良いでしょう。 – Kamae

答えて

0

正規表現にコードを追加して、同じ行の短いコードの後に​​内容をチェックし、今度はpreg_match_all()が毎回正しく一致するようにしました。私は試したすべてのテスト(同じテキスト、同じスペースと改行文字)で、更新前後の内容が同じであるため、何が起こっているのかまだ分かりません。

かかわらず、私は最後のHTMLタグの確認後、以下の正規表現を追加することによって、それを修正:

(?:.+)?

だから、完全な表現は次のとおりです。

(<.+>)?[[]{$code}[]](<\/.+>)?(?:.+)?((?:\n.+\n?)+)(<.+>)?[[]{$code}[]](<\/.+>)?

関連する問題