【问题标题】:Special characters handling RTF fields处理 RTF 字段的特殊字符
【发布时间】:2012-11-02 08:14:39
【问题描述】:

我们确实从 Tridion 5.3 升级到了 Tridion 2011 SP1。

在 Tridion 5.3 中,我们使用 VBScript 模板,作为此次升级的一部分,我们将现有的 VBScript 模板转换为复合组件模板。我们面临下面提到的两个关于 RTF 字段内容的问题。

问题 1:在我们现有的 RTF 字段内容中,我们在多个位置有空标签/HTML 标签。 eg.<a name="Contact" id="Contact"></a> 当我们使用复合组件模板(Tridion 2011 SP1 环境)发布内容时,上述锚标记将转换为<a name="Contact" id="Contact" />。这破坏了现有的 javascript 功能。为了克服这个问题,我们编写了 C# 函数来查找空标签并用   替换内部文本,例如 <a name="Contact" id="Contact"> </a>,然后一切正常。但是在 CT 级别为每个 RTF 字段调用此函数是一项很大的活动,因为我们有编号 Component Tempate。有没有更好的办法。

问题 2:在同一个 RTF 字段中,我们有类似   的内容(可能是编辑从网络或其他地方复制粘贴了它),所以当我们尝试发布页面或组件时,它会因错误而失败。 JScriptException:Expression valueUnterminated String Constant.

是否有任何默认的 TBB 可以帮助解决问题?

【问题讨论】:

  • 如果您不调用清理模板(默认完成操作的一部分),则应修复第一个问题
  • 删除后清理模板问题依然存在。
  • this question中查看自动关闭锚的其他选项。

标签: tridion tridion-2011


【解决方案1】:

问题 1:

您还可以使用 Filtering XSLT 在组件保存时修改您的 RTF 内容。

这样,您可以在组件保存时将任何空标签 <tag></tag> 替换为 <tag> </tag>,并且不需要对模板进行任何进一步的更改。

问题 2:

  似乎是一个编码的 ,见字符代码:http://www.escapecodes.info/

也许您可以使用过滤 xslt 或 C# TBB 用适当的 html 编码替换此字符代码

【讨论】:

  • 使用   时会出现错误,这有点奇怪。因为它是一个有效的数字实体。无论如何,您可以尝试用相同的 XSLT 替换它,如下所示:
【解决方案2】:

由于您已经拥有将内联封闭锚标签转换为其中包含不间断空格的锚标签的功能,您可以考虑在页面模板中使用此功能,而不是在每个组件模板中使用它;这将需要更少的模板来更改...

您可能还需要考虑用正确闭合的锚标记替换内联闭合锚标记,而无需实际插入额外的空格。

下面是一个 C# 片段,您可以在 TBB 中使用它来替换内联封闭锚标记:

Item outputItem = package.GetByName(pcakge.OutputName);
package.Remove(outputItem);
string outputString = Regex.Replace(outputItem.GetAsString(), "(<a[^>]*?)/>", "$1></a>", RegexOptions.Singleline);
outputItem.SetAsString(outputString);
package.PushItem(Package.OutputName, outputItem);

你可以扩展它来替换  与  但这不应该引起任何问题,如  是 HTML 中的有效转义序列(Tridion RTF 字段本质上是 XML,这可能是导致   出现而不是  ...)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多