Sitecore:项目显示名称不支持括号

Sitecore: Item display name does not support parenthesis

我将一个项目的显示名称从 Item1 更改为(这是新标题)

但是,在树中,当结束 ) 出现时,开始出现编码。 显示为:

(This is the new title)

请问我该如何解决这个问题?

这是一个已知错误,在 9.3 iirc 中引入。参考编号 393368。据我所知,目前还没有补丁,但您可以通过更换故障管道自行修补。

查看 Sitecore.Kernel 中的 Sitecore.Pipelines.Save.Save class。在深层嵌套的 Process() 方法中,您会看到以下代码(用 dotPeek 反映):

if (this.NeedsHtmlTagEncode(field1))
  field1.Value = WebUtil.SafeEncode(field1.Value);

NeedsHtmlTagEncode return 对于 DisplayName 是正确的(出于某些未知原因)。您可以通过将保存处理器替换为继承旧处理器并覆盖 protected virtual bool NeedsHtmlTagEncode(SaveArgs.SaveField field) 方法并使其 return 为假的处理器来解决此问题。然后你只需用你自己的带有 xpath /sitecore/processors/saveUI/processor[@type='Sitecore.Pipelines.Save.Save, Sitecore.Kernel'].

的处理器修补现有处理器

更新,因为我们刚刚在我们的一个项目中遇到这个问题:

除了 mikaelnet 所写的错误,它会影响您在内容编辑器 Appearance 部分中更改显示名称字段然后保存项目时,还有第二个错误会影响显示名称功能区您在此处使用的菜单按钮。

根据我的发现,问题出在 /sitecore/shell/Applications/Dialogs/Prompt/prompt.js 文件中,并且是在 9.0 和 9.3 之间的某个时间引入的。

这是9.0版本:

  function ok_click(evt) {
    evt && Event.stop(evt);
​
    var maxlength = (dialogArguments.maxLength != null ? parseInt(dialogArguments.maxLength, 10) : 0);
​
    if (dialogArguments.validation != null) {
      var re = new RegExp(dialogArguments.validation);
    }
​
    var result = $("Value").value;
    ...

9.3版本增加了sanitizeHtml调用:

  function ok_click(evt) {
    evt && Event.stop(evt);
​
    var maxlength = (dialogArguments.maxLength != null ? parseInt(dialogArguments.maxLength, 10) : 0);
​
    if (dialogArguments.validation != null) {
      var re = new RegExp(dialogArguments.validation);
    }
​
    var result = sanitizeHtml($("Value").value);
    ...

我相信上述错误中报告了这两个问题,我们已经看到 sanitizeHtml() 方法的补丁版本修复了一些编码问题,但我不明白为什么他们会在第一所以你看到的潜在问题仍然存在。