Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ace编辑器和实体编码/解码_Javascript_Editor_Ace Editor - Fatal编程技术网

Javascript Ace编辑器和实体编码/解码

Javascript Ace编辑器和实体编码/解码,javascript,editor,ace-editor,Javascript,Editor,Ace Editor,我已经搜索了整个SO。对于类似或确切的主题,我找不到困扰我的*(或没有看到)问题的主题。如果这是重复的,并且解决方案已经存在,请接受我的道歉 目前,我正在开发一个cms应用程序,它使用codemirror和ace编辑器,可以是这个,也可以是那个,这取决于用户/操作员的偏好,当加载特定文档时,哪一个将被触发 使用codemirror,我一点问题都没有。一切正常。Codemirror通过php的file_get_contents()将文件直接加载到textarea,而ace则通过ajax加载内容(当

我已经搜索了整个SO。对于类似或确切的主题,我找不到困扰我的*(或没有看到)问题的主题。如果这是重复的,并且解决方案已经存在,请接受我的道歉

目前,我正在开发一个cms应用程序,它使用codemirror和ace编辑器,可以是这个,也可以是那个,这取决于用户/操作员的偏好,当加载特定文档时,哪一个将被触发

使用codemirror,我一点问题都没有。一切正常。Codemirror通过php的file_get_contents()将文件直接加载到textarea,而ace则通过ajax加载内容(当前应用程序的本质要求如此),而困扰我的问题实际上是一个运算符/字符:&

我已经检查了我在后端编写的所有方法,没有一个单独的清理方法或函数或preg或其他任何东西。。这是我实现的

我个人在后端处理的唯一一件事是textarea标记,它被包装在comment中,并在保存为php/html文件时再次展开

Ace是积极地将字符转换为&entity一直以来,无论我尝试什么,无论选择了哪种“模式”(HTML、CSS、PHP、JS…你可以说),我不希望出现这种行为,我希望加载的代码在文档/文件加载/打开和文档/文件保存/写入时保持完整,除非用户在编辑时通常不手动编辑或转换这些字符

事实上,都“做得很好”。。ace并不“害怕他们”,没有自动转换到——只是&

我花了很多时间在ace api页面上,没有发现任何东西(或者看起来不是很好),没有特别的“setThisThat.option:boolean”等等。。这可以解决这个小问题

如果这很重要的话,我现在使用的是acemin noconflict(模式和主题也缩小了)版本,从今天起已经5天了

我知道自动转换“有问题的字符”是有原因的,但我确实知道如何用php自己处理这些字符,我所需要的就是完全禁用该功能

我希望我对我的问题很清楚, 下面是一个JavaScript模式的问题示例:

预期结果

if (typeof(pureTextReal) === "object" && aceSetMode === 'php' ) { /* Code */ }
if (typeof(pureTextReal) === "object" && aceSetMode === 'php' ) { /* Code */ }
Ace结果

if (typeof(pureTextReal) === "object" && aceSetMode === 'php' ) { /* Code */ }
if (typeof(pureTextReal) === "object" && aceSetMode === 'php' ) { /* Code */ }

当我完成了我想要的事情时,这个问题不应该再提了

当加载内容时,所有适用的字符都被其html实体替换,并首先放置在隐藏的textarea中,然后将textarea.value传递给ace元素,在ace加载时,所有字符都会正确显示。ace和codemirror现在的工作方式完全相同

下面是一个工作ace场景的示例

通过PHP生成的HTML

页面中间的某个地方,在表格内..

Ace pre tag在这里(pre或div tag都工作正常) 请注意,没有&present,但是,它现在被转换为所有其他特殊角色,并且在它存在时被转换一次

Ace自定义配置

此文件以前是由自定义
dBmb.headScript
函数提取(创建)的 *(将脚本标记附加到头部),在加载的html文档末尾, 它是动态的。这个脚本接受PHP提供的服务

加载所有内容后,这就是我在屏幕上看到的内容

没有控制台通知和任何未定义的错误


POST请求被更改时-
$\u POST['code-content']
是我保存到新的/编辑过的文件中的内容。

tl;博士-我建议你组织你的帖子,鼓励人们阅读所有的东西。例如,添加标题。把你的帖子写得漂亮点。甚至可以添加一个摘要。这样,您的代码中就有了对textarea的正确转义,但您不知道在哪里。我确实知道我的代码是如何工作的,除了codemirror和ace中的标记外,我根本没有进行转义,codemirror和ace中的标记刚刚起作用,ace不想起作用*(我已经描述过),现在,我正在先用php将转义代码str_replace(array($normalchars),array($replace),$code)写入/注入隐藏的文本区域,用于ace,并在加载时将textarea.value传递给ace会话。这是巨大的区别。Ace本身不会逃避任何东西,如果您调用
editor.setValue(“&”)
,它不能将值更改为
&尝试在setValue之前添加console.log以查看此内容我对您使用ace的经验毫无疑问,但相信我,我自己没有转换任何内容,when&;出现在ace中-无论发生什么。我自己的代码中的每一个部分都是纯UTF-8。所以,ace(就我而言)就是这么做的。往返靠自己的力量。然而,我没有发现这是一个缺陷,我首先尝试的可能是,不适合ace it自身(在页面加载到ace编辑器元素的过程中,使用ajax动态加载内容)。。现在,情况不同了。没有ajax请求-有效。很抱歉,我第一次评论的语气是错误的,我想说的是,用ajax请求加载文本是正确的方式,通过textarea传递文本是缓慢的,通常不应该这样做。最好能找到这个问题的根本原因。如果您使用的是setValue或其他调用,在控制台中运行editor.setValue(&)时会发生什么?
    div#code-wrapper {
        height: 100% !important;
        padding-top: 5px;
        border-top: 3px solid LightGrey;
    }

    div#code-wrapper * {
        transition: none !important;
    }

    pre#editor {
        display: block;
        width: auto;
        height: auto;
        text-align: initial;
        line-height: 1.5;
    }

    .ace_editor {
        font-size: 100% !important;
    }

    .cloak {
        display: none !important;
        max-width: 0 !important;
        max-height: 0 !important;
        position: absolute;
        z-index: -10;
        overflow: hidden;
        visibility: hidden;
    }
    // dbmb.ace.config.js
    var wh, textarea, elementAce, safetext, editor;

    document.onreadystatechange = function () {
        if (document.readyState === "complete") {

            elementAce = document.getElementById(aceCode);
            textarea = document.getElementById(hidden);

            editor = ace.edit(elementAce);
            safetext = textarea.value;

            editor.setOptions({
                useWorker: false,
                showPrintMargin: false,
                behavioursEnabled: true,
                theme: "ace/theme/" + aceTHEME,
                mode: "ace/mode/" + aceSetMode
            });

            editor.$blockScrolling = Infinity;
            editor.session.setUseWrapMode(true);
            editor.session.setValue(safetext);

            var autoHeight = function() {
                wh = (window.innerHeight - 100);
                elementAce.style.height = wh + 'px';
                editor.resize();
            };

            window.onresize = autoHeight;

            editor.getSession().on('change', function(e) {
                textarea.value = editor.session.getValue();
            }); autoHeight();

    }};