php var

时间:2017-07-28 13:16:06

标签: php double-quotes

我是php的新手。我必须在var中存储img标记。我认为这没关系:

$fotoTag1 = "<img src='42.png'
alt='text alt'>";

但问题是,如果照片名称或alt中有单引号?对于intance,不要

我尝试过:

$fotoTag1 = "<img src='don't.svg' alt='don't>'";
echo htmlspecialchars ($fotoTag1);
echo addslashes($fotoTag1);

$fotoTag2 = "<img src='don\'t.svg' alt='don\'t'>";
echo $fotoTag2;

(这是一个简化的例子,但url和alt来自sql数据库,当然,我无法手动更改文本。我需要一般解决方案)

6 个答案:

答案 0 :(得分:2)

使用htmlspecialchars()正确编码用于构建HTML片段的文本片段,而不是您构建的HTML:

$fotoTag1 = '<img src="'.htmlspecialchars("don't.svg").'" alt="'.htmlspecialchars("don't").'">';

或者,更清楚:

// Wrapped for clarity
$fotoTag1 = sprintf(
    '<img src="%s" alt="%s">',
    htmlspecialchars("don't.svg"),
    htmlspecialchars("don't")
);

了解sprintf()以及在PHP中指定string的不同方法。

构建HTML内容时,

addslashes()无效。作为旁注,它是一个过时的功能,现在没有很多用法。

答案 1 :(得分:2)

$fotoTag2 = "<img src=\"don't.svg\" alt=\"don't\">";
echo $fotoTag2;

答案 2 :(得分:1)

$fotoTag1 = "<img src='don't.svg' alt='don't>'";

这里的问题与PHP无关。

您有一个以撇号字符分隔的HTML属性值,并且您希望在该值中使用撇号。

如果要在HTML中将具有特殊含义的字符表示为原始字符,可以使用字符引用。

这可以是命名实体(&apos;),也可以是unicode(&#39;)中字符位置的数字引用之一;

<img src='don&apos;t.svg' alt='don&#39;t'>

注意:&apos;相对较晚地添加到HTML中。 IE的旧版本不支持它。

或者,您可以更改HTML,以便使用双引号来分隔数据:

<img src="don't.svg" alt="don't">

这会引入PHP问题,因为您正在使用它们来分隔字符串文字。

在这种情况下,您需要转义PHP的数据,使用反斜杠字符。

$fotoTag1 = "<img src=\"don't.svg\" alt=\"don't\">";

或者,您可以使用其他形式的字符串生成,例如HEREDOC。

$fotoTag1 = <<<END
<img src="don't.svg" alt="don't">
END;

根据经验,最好避免首先将HTML存储在变量中。

如果要输出数据,只需切换到输出模式:

?>
<img src="don't.svg" alt="don't">
<?php

如果您需要变量,可以随时退回到PHP模式。

$src = "don't.svg";
$alt = "don't";
?>
<img src="<?php echo htmlspecialchars($src); ?>" alt="<?php echo htmlspecialchars($alt); ?>">
<?php

(请注意,对于所涉及的字符,此示例中不需要htmlspecialchars,但在处理以编程方式获取的数据时,它确实可以保护您,但您无法保证HTML安全

答案 3 :(得分:0)

您使用htmlspecialchars()时有正确的想法,此具体示例的问题在于default函数无法转义'。您需要添加标记ENT_QUOTES以使用htmlspecialchars()转义单引号。

您还应该将此函数仅应用于您想要转义的字符串,而不是整个html行。在大多数情况下,这可能会导致逃避你不想逃脱的角色的意外副作用。

答案 4 :(得分:0)

试试这个,它正在运作:

$fotoTag1 = '<img src="'.htmlspecialchars("don't.svg").'" 
alt="'.htmlspecialchars("don't").'">';
echo $fotoTag1;

答案 5 :(得分:-1)

您应该使用html ascii代码,因此对于您的示例:

$fotoTag2 = "<img src='don&#39;t.svg' alt='don&#39;t'>";

因为&#39;是单引号的ascii代码。