Php 剥去标签并修剪工作不正常

Php 剥去标签并修剪工作不正常,php,Php,我正在制作一个模因发生器,由Imagick生成图像。我的问题是,即使我对用于图像的字符串执行一些操作,输出也是不正确的 举例来说: $_POST['text_top'] = " test test<br>"; //(starts with a space) 但在显示$text_top时,在将变量粘贴到图像上后,我得到: &nbsptest test&lt;br&gt; 为什么会发生这种情况,如果我调用strip_标签和trim,从我所看到的,正确的,像往常

我正在制作一个模因发生器,由Imagick生成图像。我的问题是,即使我对用于图像的字符串执行一些操作,输出也是不正确的

举例来说:

$_POST['text_top'] = " test test<br>"; //(starts with a space)
但在显示$text_top时,在将变量粘贴到图像上后,我得到:

&nbsptest test&lt;br&gt;
为什么会发生这种情况,如果我调用strip_标签和trim,从我所看到的,正确的,像往常一样

所有都是UTF8编码的

谢谢!

编辑:(完整代码)

函数wordWrapAnnotation(&$image,&$draw,$text,$maxWidth)
{
$words=分解(“,$text);
$lines=array();
$i=0;
$lineHeight=0;
而($i=计数($words))
{
$lines[]=$currentLine;
打破
}
//请检查是否可以在这行中添加其他单词
$metrics=$image->queryFontMetrics($draw,$currentLine.''.$words[$i+1]);
while($metrics['textWidth']=count($words))
打破
$metrics=$image->queryFontMetrics($draw,$currentLine.''.$words[$i+1]);
}
//我们无法将下一个单词添加到此行,因此请循环到下一行
$lines[]=$currentLine;
$i++;
//最后,更新行高度
如果($metrics['textHeight']>$lineHeight)
$lineHeight=$metrics['texthheight'];
}
返回数组($lines,$lineHeight);
}
$text\u top=带标签(修剪($\u请求['text\u top']);
$text\u bottom=带标签(修剪($\u请求['text\u bottom']);
$id_base=trim($_请求['id_base']);
/*新事物形象化*/
$im=新图像标记($_请求['image']);
/*新形象画*/
$draw=新的ImagickDraw();
/*对文本的定义52*/
$draw->setFontSize(52);
$draw->setTextAlignment(2);
$draw->setFont(“impact.ttf”);
$draw->setFillColor('white');
$draw->setStrokeColor(“黑色”);
$draw->设置行程宽度(1);
/*阿约特·德恩·特克斯*/
//$draw->annotation($im->getImageWidth()/2,50,$text);
列表($lines,$lineHeight)=wordWrapAnnotation($im,$draw,stripslashes($text\u top),$im->getImageWidth());
$posY=50;
对于($i=0;$i<计数($line);$i++){
$draw->annotation($im->getImageWidth()/2,$posY+$i*$lineHeight,$lines[$i]);
}
$im->drawImage($draw);
你可以试试这个吗

$text_top = strip_tags(trim(html_entity_decode($_POST['text_top'], ENT_QUOTES, 'UTF-8'), "\xc2\xa0"));
您的字符串似乎是html编码的

编辑

增加了对UTF-8编码的支持。这样,非中断空间将得到适当的修剪,而不是给出一个

从PHP的
html\u entity\u decode
文档:

注:

你可能想知道为什么trim(html_entity_decode(“”));不 将字符串减少为空字符串,这是因为“” 实体不是ASCII代码32(由trim()剥离),而是ASCII代码 默认ISO 8859-1编码中的代码160(0xa0)

你可以试试这个吗

$text_top = strip_tags(trim(html_entity_decode($_POST['text_top'], ENT_QUOTES, 'UTF-8'), "\xc2\xa0"));
您的字符串似乎是html编码的

编辑

增加了对UTF-8编码的支持。这样,非中断空间将得到适当的修剪,而不是给出一个

从PHP的
html\u entity\u decode
文档:

注:

你可能想知道为什么trim(html_entity_decode(“”));不 将字符串减少为空字符串,这是因为“” 实体不是ASCII代码32(由trim()剥离),而是ASCII代码 默认ISO 8859-1编码中的代码160(0xa0)


尝试使用此小型解决方案:

$str = trim($_POST['text_top']);
$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str);
如果fist不能正常工作,请尝试以下方法:

$str = trim($_POST['text_top']);
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
$clean = preg_replace("/[^a-zA-Z0-9\/_| -]/", '', $clean);
$clean = strtolower(trim($clean, '-'));
$clean = preg_replace("/[\/_| -]+/", '-', $clean);

尝试使用此小型解决方案:

$str = trim($_POST['text_top']);
$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $str);
如果fist不能正常工作,请尝试以下方法:

$str = trim($_POST['text_top']);
$clean = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
$clean = preg_replace("/[^a-zA-Z0-9\/_| -]/", '', $clean);
$clean = strtolower(trim($clean, '-'));
$clean = preg_replace("/[\/_| -]+/", '-', $clean);

显示您的完整代码。可能是某个地方发生了
htmlspecialchars()
导致了我编辑的这个问题,我还包括了用于在图像上进行单词包装的函数。显示完整代码。可能是某个地方发生了
htmlspecialchars()
导致了此问题。我编辑了,我还包括了用于在图像上进行单词包装的函数。可以工作,但由于未知原因,html编码发生在某个地方,而不是从我的代码中。但还是要谢谢你!工作,但由于未知的原因,html编码发生在某个地方,而不是从我的代码。但还是要谢谢你!