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 说它是否对字符编码进行了任何更改,是否需要字符编码是特定的,或者它是否有任何已知的表情符号或某些代码点问题。
我感谢任何人可以提供的任何帮助或澄清。
编辑:谢谢大家。希望我能接受多个答案。
我被要求清理表情符号,以确保第三方内容与外部服务交叉兼容。某些内容包含表情符号并导致导出/导入问题。我为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 ❤? 🍕
EncodeForHTML(test);
Run Code Online (Sandbox Code Playgroud)