PHP试图逃脱单引号

时间:2014-01-02 14:51:21

标签: javascript php html

我正在创作一个音乐播放器。但是PHP只会弄乱其中有单引号的文件名。我该如何解决这个问题?

第一个代码是我目前的PHP。 第二个代码是我想要输出的方式。

// integer starts at 0 before counting
$i = 0; 
$dir = 'music/';
if ($handle = opendir($dir)) {
    while (($file = readdir($handle)) !== false) {
        if (!in_array($file, array('.', '..')) && !is_dir($dir.$file)) 
        echo "<span class='song' id='".$file."' onClick='playSong(\"".addslashes($file)."\");'>".$file."</span><br />";
    }
}

起初我做了HTML,但是现在我想使用PHP,所以我可以将歌曲拖到文件夹中,然后自动添加到列表中。

这就是HTML的方式,这就是我希望PHP输出的方式。

<span id="Martin Garrix - Animals" onClick="playSong('Martin Garrix - Animals');">Martin Garrix - Animals</span>
<br />
<span id="TryHardNinja - Doin' it grand" onClick="playSong('TryHardNinja - Doin\' it grand');">TryHardNinja - Doin' it grand</span>
<br />
<span id="TryHardNinja - Calling All Ghosts" onClick="playSong('TryHardNinja - Calling All Ghosts');">TryHardNinja - Calling All Ghosts</span>

5 个答案:

答案 0 :(得分:2)

只需更改引号:

echo '<span class="song" id="'.$file.'" onClick="playSong(\''.addslashes($file).'\');">'.$file.'</span><br />';

PS:如果你需要addslashes,我也不太确定。

答案 1 :(得分:0)

将HTML ASCII代码用于单引号:

&#39;

http://www.ascii.cl/htmlcodes.htm

答案 2 :(得分:0)

你说:

  

但是PHP只会弄乱其中有单引号的文件名。

但是你编码本身就是通过addslashes在这一行添加斜杠:

echo "<span class='song' id='".$file."' onClick='playSong(\"".addslashes($file)."\");'>".$file."</span><br />";

查看您的HTML似乎您添加addslashes的原因可能与您的HTML标记参数相关联(即:class='song'&amp; such),其中包含单引号。所以我建议你在它们上使用双引号&amp;只需完全删除addslashes

echo '<span class="song" id="'.$file.'" onClick="playSong("'.$file.'");'>'.$file.'</span><br />';

或者您可以使用preg_replace代替addslashes$file字符串中的所有单引号更改为其的ASCII HTML实体(&#39;):< / p>

echo "<span class='song' id='".$file."' onClick='playSong(\"".preg_replace('/\'/', '&#39;', $file)."\");'>".$file."</span><br />";

答案 3 :(得分:0)

而不是addslashes,使用htmlentities,这也避免了很多无关的麻烦,例如当你的歌曲标题不是英文时,不同的编码。

echo '<span class="song" id="'.$file.'" onClick="playSong(\''.htmlentities($file, ENT_QUOTES, 'UTF-8').'\');">'.htmlentities($file, ENT_QUOTES, 'UTF-8').'</span><br />';

答案 4 :(得分:0)

How to escape only single quotes?中所述,使用注射安全的json_encode():

$my_str = json_encode("using single quote here: '",JSON_HEX_APOS);

echo $my_str;

这给你输出:

using single quote here: \u0027

与JavaScript中的\'相同。