php变量中的引号

php变量中的引号,php,double-quotes,Php,Double Quotes,我是php新手。我必须在var中存储一个img标记。我认为这样可以: $fotoTag1 = "<img src='42.png' alt='text alt'>"; $fotoTag1=”“; 但是如果照片的名称或alt?中只有一个引号,问题就来了?。暂时不要 我所尝试的: $fotoTag1 = "<img src='don't.svg' alt='don't>'"; echo htmlspecialchars ($fotoTag1); echo addslash

我是php新手。我必须在var中存储一个img标记。我认为这样可以:

$fotoTag1 = "<img src='42.png'
alt='text alt'>";
$fotoTag1=”“;
但是如果照片的名称或alt?中只有一个引号,问题就来了?。暂时不要

我所尝试的:

$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;
$fotoTag1=“”;
echo htmlspecialchars($fotoTag1);
echo addslashes($fotoTag1);
$fotoTag2=“”;
echo$fotoTag2;

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

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

$fotoTag2=”“

“因为”是单引号的ascii代码。

用于正确编码用于构建HTML片段的文本片段,而不是构建的HTML:

$fotoTag1 = '<img src="'.htmlspecialchars("don't.svg").'" alt="'.htmlspecialchars("don't").'">';
$fotoTag1='';
或者,更清楚地说:

// Wrapped for clarity
$fotoTag1 = sprintf(
    '<img src="%s" alt="%s">',
    htmlspecialchars("don't.svg"),
    htmlspecialchars("don't")
);
//为了清晰起见,将其包装起来
$fotoTag1=sprintf(
'',
htmlspecialchars(“dot.svg”),
htmlspecialchars(“不要”)
);
请阅读PHP中指定a的各种方法

在构建HTML内容时没有帮助。作为旁注,它是一个过时的函数,现在没有太多的用途。

$fotoTag2=“”;
echo$fotoTag2;
注意:
&apos添加到HTML的时间相对较晚。旧版本的IE不支持它


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

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

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

在这种情况下,需要对PHP的数据进行转义,这是使用反斜杠字符完成的

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

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

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

$fotoTag1=您使用
htmlspecialchars()
的想法是正确的,这个特定示例的问题是函数不能通过。您需要添加标志
ENT\u QUOTES
以使用
htmlspecialchars()
转义单引号


您还应该只将此函数应用于希望转义的字符串,而不是整个html行。在大多数情况下,这可能会导致转义您不希望转义的字符产生意外的副作用。

试试这个,它会起作用:

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

提示:用单引号打开和关闭内容-速度更快:)用反勾号转义。顺便说一句,将整个HTMLIMG标记存储在一个变量中并不是很好的做法。相反,您应该只将图像名称保存在变量中,然后在HTML代码中包含此变量。像
$fotoTag1=“\”;
@litelite-\在HTML中不是具有任何特殊意义的字符。将其放入HTML属性值只意味着\@Quetin-Oh-right,error-escape“您使用htmlspecialchars()的想法是正确的“-他们没有。需要编码的是您在属性值中输入的数据,而不是完整的HTML字符串。他们使用该函数的想法是正确的,但是是的,执行不正确,并且已经注意到。
$fotoTag1 = "<img src=\"don't.svg\" alt=\"don't\">";
$fotoTag1 = <<<END
<img src="don't.svg" alt="don't">
END;
?>
<img src="don't.svg" alt="don't">
<?php
$src = "don't.svg";
$alt = "don't";
?>
<img src="<?php echo htmlspecialchars($src); ?>" alt="<?php echo htmlspecialchars($alt); ?>">
<?php
$fotoTag1 = '<img src="'.htmlspecialchars("don't.svg").'" 
alt="'.htmlspecialchars("don't").'">';
echo $fotoTag1;