对于我使用PHP构建的YouTube网络应用,我有一个简单的视频播放器,嵌入了<iframe>
,然后是<div>
,其中包含有关当前加载的视频的信息(说明, id,title等。)
<ul>
包含使用YouTube上的PHP gData API提取的视频列表,每个<li>
都包含一个链接,用于激活JavaScript以将视频播放器更改为正确的视频并进行更新页面上的视频信息。
问题在于:gData
返回视频描述的多行非转义序列,但在JavaScript中不起作用。我应该如何删除换行符并将其替换为<br>
(请注意它们不是\n
换行符,它们是实际的换行符和换行符。)
我还必须逃避在JavaScript字符串中无效的其他内容,例如撇号字符'
。这样做的最佳方式是什么?
答案 0 :(得分:5)
不要费心去尝试逃避自己的事情。只需使用json_encode,它将为您处理所有这些细节:
<script type="text/javascript">
var description = <?php echo json_encode($description) ?>;
</script>
答案 1 :(得分:4)
Marc B给出了最好的答案。使用json_encode:http://php.net/manual/en/function.json-encode.php Go,upvote他的答案。
以下是我原来的答复:
<?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;
?>
使用正则表达式的相同内容:
<?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\\'
结束。