向javascript函数提供可能包含特殊字符的字符串参数

时间:2012-07-29 01:12:55

标签: javascript escaping

我需要将可能包含特殊字符的字符串传递给Javascript函数,如下所示。

function setEditMode(countryName, countryCode)
{
    document.getElementById("txtCountryName").value=countryName;
    document.getElementById("txtCountryCode").value=countryCode;        
}

<input id="txtCountryName" name="txtCountryName" type="text" maxlength="50"/><br/>

<input id="txtCountryCode" name="txtCountryCode" type="text" maxlength="2"/><br/>               

<input type="button" value="Submit" id="btnEdit" name="btnEdit" onclick="setEditMode('&#039;xx&#039; &#034;yy&#034; # $', '&#034;&#039;');" />

单击该按钮时,需要将包含特殊字符的两个类型字符串参数提供给setEditMode() Javascript函数。字符串需要转义。我尝试使用escape()函数,但它不起作用。有没有办法将这些参数传递给函数? (我正在处理JSP)。

[setEditMode()函数的那些参数对应'xx' "yy" # $"' 分别]。

1 个答案:

答案 0 :(得分:2)

您在示例中显示的参数包含html实体。你想解码它们吗? Javascript中没有本机方法可以执行此操作,但您可以使用以下代码段(需要jQuery):

 $("<div>").html("&#034;").html();

在你的情况下:

 var countryName = $("<div>").html(countryName).html();
 var countryCode = $("<div>").html(countryCode).html();

或使用通用功能:

function decodeHtmlEntities(value)
{
   return $("<div>").html(value).html();
}

function setEditMode(countryName, countryCode)
{
    document.getElementById("txtCountryName").value=decodeHtmlEntities(countryName);
    document.getElementById("txtCountryCode").value=decodeHtmlEntities(countryCode);        
}

或使用此功能:http://phpjs.org/functions/html_entity_decode:424 如果你不想用jQuery创建div标签。

编辑:根据您的评论。内联脚本中的"'实体似乎存在问题。你可以通过调用这样的方法来解决它:

<input type="button" value="Submit" id="btnEdit" name="btnEdit" onclick="setEditModeWrapper()" />
<script type="text/javascript">
    function setEditModeWrapper()
    {
        setEditMode('&#039;xx&#039; &#034;yy&#034; # $', '&#034;&#039;');
    }
</script>   

如果您希望在输入字段中对这些解码进行解码,请将此解决方案与上述解码功能结合使用。

或更优雅:

<input type="button" value="Submit" class="submitBtn" id="btnEdit" name="btnEdit" data-countryname="&#039;xx&#039; &#034;yy&#034; # $" data-countrycode="&#034;&#039;" />

<script tyoe="text/javascript">
$(".submitBtn").on("click", function(e)
{
    var btn = $(e.currentTarget);
    var countryName = btn.attr("data-countryname");
    var countryCode = btn.attr("data-countrycode");
    setEditMode(countryName, countryCode);
});
</script>

将脚本标记放在页面底部,它将根据data-countryname和data-countrycode属性处理所有提交按钮。以与在onclick处理程序中呈现数据相同的方式渲染它们。