真的真的被一个 _POST 美元的 PHP 问题难倒了


Really really stumped on a $_POST PHP Issue

我正在构建一个CMS,我正在尝试制作一个版本控制系统。

每次用户发布对现有网页的更新时,我希望"版本控制"表保留哪些字段已被编辑的事件日志......

为此,我运行了一堆循环来检查用户刚刚填写的表单内容是否与点击提交之前网站上的内容不同......

因此,在我进行任何更新之前,我有以下代码(如果格式歪斜,请道歉(:

$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 将 = ' ',因此,不应在"事件"列中输入任何内容。 除了它不断输入"内容更改",实际上,对每个字符串(例如标题字段、页脚字段等(都是这样做的! 奇怪的是有 2 个整数输入,它们被事件菜单记录得很好。

如果我打印出 strlen(stripslashes(strtolower(htmlentities($_POST['content'](((( 和 strlen(strtolower($contents_original((,它揭示了长度是不同的......

代码或数据库长度中没有任何内容会导致这种抑制。


输出自:stripslashes(strtolower(stripcslashes($thenewcontent(((

章鱼你好!

欢迎来到Jonathan M. Edwards的平面设计页面。

无论您需要设计什么 - 商业网站,乐队徽标,您的名字 - 我都有技能为您提供创意和专业的产品。

单击下面的缩略图以快速浏览:

要安排报价,或者如果您只是想讨论一个想法,请给我发送电子邮件至:联系[at]angry-octopus.co.uk 或致电(0789(694-3379


输出自stripslashes(strtolower(html_entity_decode($contents_original(((

章鱼你好!

欢迎来到Jonathan M. Edwards的平面设计页面。

无论您需要设计什么 - 商业网站,乐队徽标,您的名字 - 我都有技能为您提供创意和专业的产品。

单击下面的缩略图以快速浏览:

要安排报价,或者如果您只是想讨论一个想法,请给我发送电子邮件至:联系[at]angry-octopus.co.uk 或致电(0789(694-3379

^^^^^^^^^^^^^^以上所有内容都是从记事本复制/粘贴的.TXT。

如果调用 htmlentities() ,由于字符转换,字符串可能会更长。或者更短,因为您也使用 stripslashes() .(谢谢豪尔赫(

是数据库中的数据多字节,

如果数据是Unicode(多字节(,正常的strlen函数不能很好地工作,因为它们会将字符串计为单字节

您可以尝试使用函数:

mb_strlen (strtolower($contents_original)) )

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