在php中创建参数以执行javascript函数会产生错误

在php中创建参数以执行javascript函数会产生错误,javascript,php,parameters,Javascript,Php,Parameters,如果单击,我将创建一个执行javascript的链接。(显示一个包含$test内容的div弹出窗口) php代码如下所示: echo "<a ID=\"it_$idnr\" class=\"tooltip\" href=\"javascript:it_popup('it_$idnr','$test');\">" echo“” 问题在于,在某些情况下,此代码会产生错误: 语法错误:未终止的字符串文字 很明显,只有在$test包含特殊字符(如新行或引号)时才会发生这种情况 我怎样才能

如果单击,我将创建一个执行javascript的链接。(显示一个包含$test内容的div弹出窗口)

php代码如下所示:

echo "<a ID=\"it_$idnr\" class=\"tooltip\" href=\"javascript:it_popup('it_$idnr','$test');\">"
echo“”
问题在于,在某些情况下,此代码会产生错误: 语法错误:未终止的字符串文字

很明显,只有在$test包含特殊字符(如新行或引号)时才会发生这种情况

我怎样才能完全防止这种情况?
简单的搜索和替换不是一个解决方案,因为它不应该改变结果。

您可以对其进行json编码以使其js安全,并对其进行html编码以使其html安全

echo "<a ID=\"it_$idnr\" class=\"tooltip\" href=\"javascript:it_popup('it_$idnr',".htmlspecialchars(json_encode($test)).");\">"
echo“”

尝试使用htmlspecialchars($test)htmlspecialchars()似乎不够,错误仍然会发生。使用htmlspecialchars()时,错误不能用引号再现,但仍然可以用换行符。导致错误的是$text中的%0A,但我无法替换它。奇怪!让它与preg_replace(“/\r |\n/s”,“
,$test)”一起使用@Klaus在这种情况下,
$test
是什么?$test可以包含大量由用户输入的文本。它可能包含每个字符。问题是$text有时包含%0A,这会产生错误。@Klaus我知道发生了什么,在href属性中%0A被解码,从而创建换行符。你能用onclick属性代替href吗?我用preg_replace(“/\r |\n/s“,”
,$test)来处理它