对于我用YouTube构建的PHP应用程序,我有一个简单的视频播放器,嵌入了一个<iframe>
,然后是一个包含当前加载的视频信息(描述、id、标题等)的<div>
。
<ul>
包含使用PHP gData API从YouTube获取的视频列表,每个<li>
包含一个链接,该链接激活JavaScript以将视频播放器更改为正确的视频,并更新页面上的视频信息。
问题是:gData
为视频描述返回了一个多行的非转义序列,这在JavaScript中是不起作用的。我应该如何删除换行符并将其替换为<br>
(请注意,它们不是像\n
那样的换行符,它们是实际的换行符和换行符)。
我还必须转义在JavaScript字符串中不起作用的其他内容,例如撇号字符'
。做这件事最好的方法是什么?
发布于 2011-10-04 03:17:27
Marc B给出了最好的答案。使用json_encode:http://php.net/manual/en/function.json-encode.php Go,提升他的答案。
以下是我最初的回应:
<?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\\'
处结束。
发布于 2011-10-04 03:35:26
不要费心自己去逃避这些东西。只需使用json_encode,它将为您处理所有这些细节:
<script type="text/javascript">
var description = <?php echo json_encode($description) ?>;
</script>
https://stackoverflow.com/questions/7639459
复制相似问题