使用 EncodeForHTML 时的 Coldfusion/Lucee 编码问题

Jac*_* FW 2 coldfusion encoding escaping esapi lucee

对某些字符使用 EncodeForHTML 时遇到问题(在这种情况下是表情符号)

在这种情况下的文本是: ??abc ???????

现在如果我只是一个直接的输出

<cfoutput>#txt#</cfoutput>
Run Code Online (Sandbox Code Playgroud)

它显示正确,没有问题,但如果我先使用 EncodeForHTML

<cfoutput>#EncodeForHTML(txt)#</cfoutput>
Run Code Online (Sandbox Code Playgroud)

我明白了??a??b??c?? ???????? ???????????????????????? ??

我也使用 EncodeForXML 和 esapiEncode 对其进行了测试以确保;所有人都给了我相同的结果。我已经验证了 Lucee 中的编码设置是 UTF-8,并且元字符集标记也设置为 UTF-8。我找不到任何文档 re: EncodeForHTML 说它是否对字符编码进行了任何更改,是否需要字符编码是特定的,或者它是否有任何已知的表情符号或某些代码点问题。

我感谢任何人可以提供的任何帮助或澄清。

编辑:谢谢大家。希望我能接受多个答案。

Jam*_*erg 5

我被要求清理表情符号,以确保第三方内容与外部服务交叉兼容。某些内容包含表情符号并导致导出/导入问题。我为emoji-java库编写了一个ColdFusion 包装器来识别、清理和转换表情符号。

https://github.com/JamoCA/cf-emoji-java

例如,parseToAliases()函数“用别名替换在字符串中找到的所有表情符号的 unicode”。

emojijava = new emojijava();
emojijava.parseToAliases('I like ');   // I like :pizza:
Run Code Online (Sandbox Code Playgroud)

为了“编码”,您可以使用任一parseToHtmlDecimal()parseToHtmlHexadecimal()之前,使用功能EncodeForHTML()

emojijava = new emojijava();
test = emojijava.parseToHtmlDecimal('I like ');   // I &#10084;? &#127829;
EncodeForHTML(test);
Run Code Online (Sandbox Code Playgroud)