coldfusion removeHtml错误地输出拉丁文本。有没有更好的办法?

时间:2014-06-24 09:10:06

标签: mysql coldfusion coldfusion-9

我有一个修剪功能,可以正常使用英文文本,但如果相同的功能读取带有重音等的西班牙文本,它会删除所有的重音。有没有更好的方法来削减输出?

例如,如果来自MySQL的文本是“你好,早上好”它输出正常并正确修剪它,但是如果我的文字是'hola ybuenosdías'它会修剪它,但也剥掉'í'在días这个词中。

我正在使用的代码是:

<cfif trim(getProps.property_description) gt "">
      #formatTeaser(removeHtml(getProps.property_description),290)#… 
      [<a href="">#lang_more#</a>]
</cfif>

我还在页面中添加了代码,但它没有任何区别:

<cfprocessingdirective pageencoding="utf-8" />

当我不使用上述修剪方法时,MySQL字段设置为varchar并在其他页面上正确显示。

4 个答案:

答案 0 :(得分:1)

我认为您的问题不在于trim(),而在于removeHTML()

结帐OWASP。它是一个Java库,您可以在CF应用程序中使用它来有选择地从字符串中过滤任何不安全/不必要的内容。

Peter Freitag在他的博客上有一些不错的examples

答案 1 :(得分:1)

ColdFusion中甚至没有RemoveHTML()函数。

您可能从某些网站上删除的UDF必须是错误的。这对我有用:

<cfscript>
function RemoveHtml(s) {
    return REReplace(s, "<[^>]+>", "", "ALL");
}
function FormatTeaser(s, i) {
    // dummy
    return s & "…";
}
</cfscript>

<cfset getProps.property_description = "<b>¡Hola y buenos días!<b>">
<cfset lang_more = "expandir">

<cfset clean_description = Trim(RemoveHtml(getProps.property_description))>
<cfif clean_description gt "">#formatTeaser(clean_description, 290)# [<a href="">#lang_more#</a>]</cfif>

输出

¡Hola y buenos días!… [expandir]

答案 2 :(得分:0)

删除HTML的正则表达式只在某些时候起作用,并且可能正在剥离你的unicode。 (您是否只接受a-zA-Z0-9?)要安全删除HTML,请使用Jsoup(http://jsoup.org/)将jsoup jar放入WEB-INF / lib目录并重新启动ColdFusion服务。

然后创建一个Jsoup对象

<cfset local.jsoup = createObject( "java", "org.jsoup.Jsoup" )/> <cfset local.whitelist = createObject( "java", "org.jsoup.safety.Whitelist" ) /> <cfset local.cleanHTML = local.jsoup.clean( arguments.html, local.whiteList.none()/>

就是这样,local.cleanHTML是你清理过的文本。然后运行你的其他功能。如果仍有问题,请向我们展示您的FormatTeaser方法。

答案 3 :(得分:-2)

我终于使用了左()

的增强版本

你可以在这里找到它,它可以毫无问题地修剪数据...... http://cflib.org/udf/FullLeft