1

所以这就是问题所在。我在 MySQL DB 中有数据作为文本。数据通过 mysql_real_escape_string 插入。我对向用户显示的数据没有任何问题。

在某些时候,我想将这些数据传递给一个名为 foo 的 javascript 函数。

// This is a PHP block of code
// $someText is text retrieved from the database

echo "<img src=someimage.gif onclick=\"foo('{$someText}')\">";

如果 $someText 中的数据有换行符,例如:

Line 1
Line 2
Line 3

javascript 中断,因为 html 输出是

<img src=someimage.gif onclick="foo('line1
line2
line3')">

所以问题是,如何将 $someText 传递给我的 javascript foo 函数,同时保留换行符和回车符但不破坏代码?

==================================================== ==========================================

像这样使用json之后:

echo "<img src=someimage.gif onclick=\"foo($newData)\">";

它正在输出这样的 HTML:

onclick="foo("line 1<br \/>\r\nline 2");">

显示图像后跟 \r\nline 2");">

4

4 回答 4

2

json_encode()是要走的路:

$json = json_encode($someText); # this creates valid JS
$safe = HtmlSpecialChars($json); # this allows it to be used in an HTML attribute
echo "<img src=someimage.gif onclick=\"foo($safe)\">";

你可以在这里看到一个演示:http: //codepad.org/TK45YErZ

于 2012-04-03T22:51:40.150 回答
0

如果我没有解释得很糟糕,你可以这样做:

// This is a PHP block of code
// $someText is text retrieved from the database

echo "<img src=someimage.gif onclick=\"foo('{".trim( preg_replace( '/\s+/', ' ',$someText ) )."}')\">";
于 2012-04-03T22:48:18.530 回答
0

通过将 JavaScript 从 HTML 中提取出来,您可以省去很多麻烦:

<img id="myImage" src="someimage.gif"/>
<script type="text/javascript">
    var str = <?php echo json_encode($json); ?>;
    document.getElementById('myImage').addEventListener(
        'click',
        function() {
            foo(str);
        }
    );
</script>

或者类似的东西...

于 2012-04-03T23:26:41.383 回答
0

只有 json_encode() 足以转义新行

echo "<img src=someimage.gif onclick=\"foo(".json_encode($newData).")\">";
于 2012-04-03T23:38:27.180 回答