在PHP中删除引号可能有点复杂

在PHP中删除引号可能有点复杂,php,Php,我有这样的代码,它带来了img标记的字符串搜索,并将类添加到img标记中。然后我保存所有内容并将其发送到数据库 $doc = new DOMDocument(); $doc->loadHTML($article_header); $imgs = $doc->getElementsByTagName('img'); foreach ($imgs as $img) { if($img->getAttribute('class')){ } else {

我有这样的代码,它带来了img标记的字符串搜索,并将类添加到img标记中。然后我保存所有内容并将其发送到数据库

$doc = new DOMDocument();
$doc->loadHTML($article_header);

$imgs = $doc->getElementsByTagName('img');
foreach ($imgs as $img) {

    if($img->getAttribute('class')){
    } 
    else {
        $img->setAttribute('class', 'someclass');
        $article_header = $doc->saveXml();
    }
}
问题是结果会变成这样

<?xml version="1.0" standalone="yes"?> <!DOCTYPE html PUBLIC
"-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd"> <html><body><p><img
src="&quot;some_url/some_pic.jpg&quot;"
alt="&quot;&quot;" width="&quot;528&quot;"
height="&quot;722.0512820512821&quot;"
class="someclass"/></p></body></html>
$article_header = stripslashes($doc->saveXml());
但这没用

更新

<img width="\"528\"" height="\"722.0512820512821\"" alt="\"\"" src="%5C%22sources/public/users/103/articles/2011-06-11/3/img/1170x1600.gif%5C%22">
如果我删除mysql\u real\u escape\u字符串一切正常。但新的问题是,如果我这样做了,我应该用什么来代替它来为我的脚本添加一些安全性呢

已解决
我删除了mysql\u real\u escape\u字符串,仅当我将数据传递给mysql时才使用它们

我不明白这个问题的原因,但您可以使用
htmlspecialchars\u decode()
转换为

我不理解此问题的原因,但您可以使用
htmlspecialchars\u decode()
转换为

嗯,这些
字符,因此您不能将这些字符删除,因为它们不是
本身,只是它们的表示形式。您可以执行
str\u replace(“,”,“,$string);
,但这不是最好的答案,因为您应该转义
插入数据库之前,您将得到所需的结果。

嗯,这些
是一个
字符,因此您不能对这些字符进行条带斜杠,因为它们不是
本身,只是它们的表示形式。您可以执行
str_replace(“,”,$string);
,但这不是最好的答案,因为在插入数据库之前,您应该先转义
,然后才能得到所需的结果。

您的代码应该是:

$doc = new DOMDocument();
$doc->loadHTML($article_header);

$imgs = $doc->getElementsByTagName('img');
foreach ($imgs as $img) {

    if(!$img->getAttribute('class')){
        $img->setAttribute('class', 'someclass');
    }
}
$article_header = $doc->saveXml();
更新:对于下一个问题,当DomDocument解析所有数据时,您使用DomDocument就足够了,如果出现问题,将给出错误

当您想将其保存到mysql时,您需要添加
mysql\u real\u escape\u string()
以确保安全性。

您的代码应该是:

$doc = new DOMDocument();
$doc->loadHTML($article_header);

$imgs = $doc->getElementsByTagName('img');
foreach ($imgs as $img) {

    if(!$img->getAttribute('class')){
        $img->setAttribute('class', 'someclass');
    }
}
$article_header = $doc->saveXml();
更新:对于下一个问题,当DomDocument解析所有数据时,您使用DomDocument就足够了,如果出现问题,将给出错误


当你想把它保存到mysql时,为了安全,你添加了
mysql\u real\u escape\u string()

解决了我删除了mysql\u real\u escape\u string,并且只在我向mysql传递数据时才使用它们

我怀疑魔法引号与此有关。斜杠也不会。我们需要查看
$article\u header
…为什么不能
if($img->getAttribute('class')){}否则{/..
不仅仅是
if(!$img->getAttribute('class')){/../code>?而且,
mysql\u real\u escape\u string
不应该是对文本进行HTML编码的。它应该将
改为
\”
,而不是
我怀疑魔法引号与此有关。斜杠也不会。我们需要查看
$article\u header
…为什么不能
if($img->getAttribute('class')){}否则{/…
不仅仅是
if(!$img->getAttribute('class')){/…
?另外,
mysql\u real\u escape\u string
不应该是对文本进行HTML编码的。它应该将
转换为
而不是
您的代码将不起作用。
str\u replace(“”,“\”,$string);
您的代码将不起作用。
str;
这不是答案question@RiaD我指出了一个错误…因为每次图像没有类时,他都会保存XML…我猜,
$article\u header
只有一个图像没有类,现在可以工作了,但下次就不行了!顺便说一句,我更新了…这不是答案question@RiaD当他扑救时,我指出了一个错误每次图像没有类时使用XML…我猜,
$article\u header
只有一个没有类的图像,现在可以工作了,但下次它就不能工作了!顺便说一句,我更新了。。。