在javascript中处理长字符串

在javascript中处理长字符串,javascript,html,string,Javascript,Html,String,我有一个页面,用户可以在其中编辑一些值(名称、说明等),除非添加一个长字符串作为说明,否则效果很好 当用户更改输入字段的值时,会调用javascript函数检查是否有任何值与初始值不同(当站点首次加载PHP时,初始值存储为变量)。看起来是这样的: <script> //checks if a field has changed value, if yes, change class function check(div, text){ if(div.v

我有一个页面,用户可以在其中编辑一些值(名称、说明等),除非添加一个长字符串作为说明,否则效果很好

当用户更改输入字段的值时,会调用javascript函数检查是否有任何值与初始值不同(当站点首次加载PHP时,初始值存储为变量)。看起来是这样的:

<script>
    //checks if a field has changed value, if yes, change class
    function check(div, text){
        if(div.val()===text){
            div.parent().removeClass("has-warning");
            return 0;
        } else{
            div.parent().addClass("has-warning");
            return 1;
        }
    }
</script>
*here goes the html stuff*
<script>
    //whenever the form content changes
    $('#horse1').bind('input', function() {
        //the form div
        var horseDiv = $('#horse1');
        //count all the fields with changed value
        var error = check(horseDiv.find($('#name')), 'Rinaldo')
                   +check(horseDiv.find($('#race')),'-')
                   +check(horseDiv.find($('#date')),'1988-01-01')
                   +check(horseDiv.find($('#use')), 'Showpferd')
                   +check(horseDiv.find($('#shortDesc')), 'short Description')
                   +check(horseDiv.find($('#description')),'This can be a long text over multiple lines');

                   //if there is at least one field with a
                   //changed value, display an error message
        var errorDiv = horseDiv.find($('#notSaved'));
        if(error==0){
            errorDiv.hide();
        } else{
            errorDiv.show();
        }
    });
</script>

变量“text”是php脚本中的rawlurencode()字符串,div.val()是从textarea读取的纯文本。对于上面的代码,textNew===divNew返回true,即使它们包含逗号、umlaute、新行和其他讨厌的东西

尝试将描述字符串传递到中以正确地转义它。

当然它会停止工作

在PHP端,如果字符串中有换行符,则需要正确连接字符串

preg_replace( "/\r|\n/", "", $yourString );

朱丽叶,我认为最好使用event
change
而不是
input
,而不需要立即检查文本是否已更改。浏览器将为您执行所有例行操作。
您还需要知道脚本停止的原因(如果还不知道的话),您可以查看浏览器中“开发工具”窗格中的“控制台”选项卡。
如果您确实需要在用户按键后立即看到更改,我建议您使用字符串方法
localeCompare

下面是关于比较的答案
希望我能帮助你

我假设
#description
是一个
,因为您提到它可能是多行的

您发布的脚本应该包含字符
\n
,而不是脚本中的实际换行符。要实现这一点,您需要在PHP中进行替换,但不是Lemmy发布的替换,因为它只是删除了换行符。您也可以像前面讨论的那样进行JSON编码

另外,请注意,在Windows上,浏览器将以
\r\n
方式处理换行符,而不仅仅是
\n
。在进行比较之前,您还需要在JS中执行替换以删除任何
\r
字符来处理此问题


此外,您还可以执行
.find(“#选择器”)
而不是
.find($(“#选择器”))

问题是关于JavaScript的。但问题出在PHP方面。PHP正在编写文本,因此需要对其进行转义,以便javascript能够正确解析。嗯,接下来的问题是:知道如何将div.val()与json字符串进行比较吗?(check函数显然不再工作)在check函数内部,如果您打印div和text变量,会显示什么?我花了很长时间,相同输出的解决方案最终是这样的:var textNew=text.replace(/%0D/g');var divNew=encodeURIComponent(div.val()).replace(/!/g,'%21')。replace(/'/g,'%27')。replace(/(/g,'%28')。replace(/)/g,'%29')。replace(/*/g,'%2A');请提供将值存储在JavaScript变量中的PHP代码我尝试了更改,但没有成功问题是我需要对字符串进行json编码,以便将其作为参数传递感谢find的提示-dodopok的json版本起作用了,但check函数不再起作用,因为我不能将div.val()与现在json编码的文本进行比较。我在javascript中尝试了JSON.stringify,但是比较仍然不起作用。JSON编码的结果应该类似于
“第一行\n第二行”
。这实际上是需要比较的字符串。
检查(horseDiv.find(“#description”).replace(/\r/,”),“这可能是多行上的长文本”)
检查浏览器开发人员工具中的控制台。那里可能有更具体的信息。
preg_replace( "/\r|\n/", "", $yourString );