htmlspcialchars无法正常运作

时间:2010-11-03 12:14:52

标签: php

我将某些影片的标题中的代码加载到各自缩略图的title属性中,因此格式为:

  

艺术家姓名 - '歌曲标题'

我最初有这个代码:

$return .= "' title='";
$return .=$video['title'];
$return .= "'>";

显然第一个单引号导致title属性结束prematurley,所以我把它改为:

$return .= "' title='";
$return .= htmlspecialchars($video['title']);
$return .= "'>";

根本没有效果,所有的标题仍然过早结束。

我是否误解了htmlspecialchars方法?

1 个答案:

答案 0 :(得分:6)

http://php.net/manual/en/function.htmlspecialchars.php

默认情况下,htmlspecialchars()不会转义单引号(某些古老的兼容性行为)。使用htmlspecialchars($video['title'], ENT_QUOTES)

你也可能应该传递'utf-8'作为第三个参数。我把这个弃用的行为包装成这样:

function htmlencode($str, $nl2br = false, $nbsp = false)
    {
    $str = htmlspecialchars($str, ENT_QUOTES, 'UTF-8', true);
    if ($nbsp)
        {
        $str = str_replace(" ", ' ', $str);
        }
    if ($nl2br)
        {
        $str = nl2bruni($str);
        }
    return $str;
    }

/**
    PHP's built-in nl2br() only works with LF newlines. This version also works with CR+LF, CR and RS
*/
function nl2bruni($str)
    {
    return preg_replace('{\\r?\\n|\\r|\\x1e}', '<br />', $str);
    }