1

私は CMS を構築しており、バージョン管理システムを作成しようとしています。

ユーザーが既存の Web ページに更新を投稿するたびに、「バージョン管理」テーブルに、編集されたフィールドのイベント ログを保持する必要があります...

これを行うには、一連のループを実行して、ユーザーが入力したばかりのフォームの内容が、送信をクリックする前の Web サイトの内容と異なるかどうかを確認します...

したがって、更新を行う前に、次のコードがあります(フォーマットが斜めになっている場合はお詫びします):

$sql = "select * from pages where ID =" .$_POST[id];
$rs = odbc_exec ($db, $sql);
$contents_original = odbc_result($rs,"content");
$title_original = odbc_result($rs,"title");
$pageorder_original = odbc_result($rs,"pageorder");
$parent_original = odbc_result($rs,"parent");
$footer_original = odbc_result($rs,"footer");

$updated_content = trim(stripslashes(strtolower(htmlentities($_POST['content']))));
$original = trim(strtolower($contents_original));

if ($updated_content == $original) {
                $a = 'n';
                } else {
                $a = '<p>Contents changed.';
                }

// など、変数 $b - $e ... から:

    $update = "$a $b $c $d $e"; 

その後、更新ルーチンが続き (すべて正常に動作します)、バージョン更新の最後に、$update の内容を SQL の「イベント」列に挿入します (これも正常に動作します)。

でも!ユーザーが元のページ コンテンツを含むフォームをロードし、送信をクリックすると仮定します...フォームに何も変更がない場合、$a は = ' ' となり、したがって、'events' 列には何も入力されません。ただし、「変更されたコンテンツ」を入力し続け、実際には、すべての単一文字列 (たとえば、タイトル フィールド、フッター フィールドなど) に対して入力します! 奇妙なことに、2 つの整数入力があり、それらはイベント メニューによって正常に記録されます。

strlen(stripslashes(strtolower(htmlentities($_POST['content'])))) と strlen(strtolower($contents_original)) を出力すると、長さが異なることがわかります...

コードまたはデータベースの長さのいずれにも、この阻害を引き起こすものは何もありません。


出力元: stripslashes(strtolower(stripslashes($thenewcontent)))

タコからこんにちは!

ジョナサン m へようこそ。エドワーズのグラフィックデザインページ。

ビジネスのウェブサイト、バンドのロゴなど、デザインが必要なものは何でも、クリエイティブでプロフェッショナルな製品を提供するスキルがあります。

下のサムネイルをクリックして、すばやくブラウズします。

見積もりの​​手配、または単にアイデアについて話したい場合は、contact[at]angry-octopus.co.uk までメールをお送りいただくか、(0789)694-3379 までお電話ください。


OUTPUT FROM ストリップスラッシュ(strtolower(html_entity_decode($contents_original)))

タコからこんにちは!

ジョナサン m へようこそ。エドワーズのグラフィックデザインページ。

ビジネスのウェブサイト、バンドのロゴなど、デザインが必要なものは何でも、クリエイティブでプロフェッショナルな製品を提供するスキルがあります。

下のサムネイルをクリックして、すばやくブラウズします。

見積もりの​​手配、または単にアイデアについて話したい場合は、contact[at]angry-octopus.co.uk までメールをお送りいただくか、(0789)694-3379 までお電話ください。

^^^^^^^^^^^^^^ 上記のすべてをメモ帳 .TXT からコピー/貼り付けします。

4

2 に答える 2

0

はデータベース内のマルチバイトのデータです。

データがユニコード (マルチバイト) の場合、通常の strlen 関数は、文字列を 1 バイトとしてカウントするため、うまく機能しません。

関数を使用して試すことができます:

mb_strlen (strtolower($contents_original)) )

http://www.php.net/manual/en/ref.mbstring.php

于 2012-05-08T21:06:10.687 に答える
0

を呼び出すhtmlentities()と、文字変換のために文字列が長くなる場合があります。または短くすることも使用しますstripslashes()。(thx ホルヘ)

于 2012-05-08T20:57:19.757 に答える