如何从PHP中删除所有换行符并从字符串中转义字符?

时间:2011-10-03 19:05:07

标签: php javascript html youtube gdata-api

对于我使用PHP构建的YouTube网络应用,我有一个简单的视频播放器,嵌入了<iframe>,然后是<div>,其中包含有关当前加载的视频的信息(说明, id,title等。)

<ul>包含使用YouTube上的PHP gData API提取的视频列表,每个<li>都包含一个链接,用于激活JavaScript以将视频播放器更改为正确的视频并进行更新页面上的视频信息。

问题在于:gData返回视频描述的多行非转义序列,但在JavaScript中不起作用。我应该如何删除换行符并将其替换为<br>(请注意它们不是\n换行符,它们是实际的换行符和换行符。)

我还必须逃避在JavaScript字符串中无效的其他内容,例如撇号字符'。这样做的最佳方式是什么?

2 个答案:

答案 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\\'结束。