对于我在PHP中构建的YouTube web应用程序,我有一个简单的视频播放器,嵌入一个<iframe>
,然后一个<div>
与当前加载的视频(描述,id,标题等)的信息。
A <ul>
包含一个视频列表,使用PHP gData API从YouTube获取,每个<li>
包含一个链接,激活JavaScript将视频播放器更改为正确的视频,并更新页面上的视频信息。
这里是问题:gData
返回多行,非转义序列的视频描述,这在JavaScript中不起作用。我应该如何删除换行符并用<br>
替换它们(注意它们不是像'n
那样的换行符,它们是实际的换行符和换行符)。
我还必须转义在JavaScript字符串中不起作用的其他东西,例如撇号字符'
。最好的方法是什么?
不要试图自己逃避东西。只需使用json_encode,它将为您处理所有这些细节:
<script type="text/javascript">
var description = <?php echo json_encode($description) ?>;
</script>
Marc B给出了最好的答案。使用json_encode: http://php.net/manual/en/function.json-encode.php去吧,给他的答案投票。
以下是我的原始回复:
<?php
$data = "Hello, 'world'.'nHow are you doing?'n'"Good?'"'n";
$data = str_replace("'n", '<br>', $data);
$data = str_replace('"', ''"', $data);
$data = str_replace("'", "''", $data);
echo $data;
?>
相同的东西使用regex:
<?php
$data = "Hello, 'world'.'nHow are you doing?'n'"Good?'"'n";
$data = preg_replace("/'n/", '<br>', $data);
$data = preg_replace("/'"|'/", ''"', $data);
echo $data;
?>
给出了这些例子,你真的不需要转义单引号和双引号。在JavaScript中,可以使用双引号字符串,也可以使用单引号字符串。因此,使用一个并转义另一个。
您可能还需要转义反斜杠(将'
替换为''
)以确保一些有趣的YouTube上传者不会试图通过在视频描述中放置foo''bar
来破坏您的PHP脚本。现在,如果你不转义反斜杠,这会破坏你的脚本,因为JavaScript字符串替换后现在看起来像:'foo'''bar'
,这是一个语法错误,因为字符串在'foo'''
结束。