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