当我回显变量时,以原始形式出现的特殊html字符

时间:2012-08-24 22:15:47

标签: php

我从XML文件导入一些文本,然后修剪它并替换多个空格。

$var = $myxmltext;
$var = trim($var);
$var = preg_replace('/\s+/',' ',$var);

出于某种原因,我得到了" raw html"当我回应它时,像这样:

quot; or IÂ’ve instead of I've

任何想法为什么?

这是我的修剪功能:

function mytrim($mytrim){
    $mytrim = utf8_decode($mytrim); 
    $mytrim = trim($mytrim);
    $rule1 = array(
        ",",    // virgula
        ".",    // punct
        "~",    // ~
        "_",    // underscore
        "-",    // liniuta
        ")",    // paranteza inchidere
        ":",    // doua puncte
        ">",    // mai mare
        "<",    // mai mic
        "!",
        "?",
        "*",
        "&"
    );
    $rule2 = array(
        ", ",   // virgula
        ". ",   // punct
        " ~ ",  // ~
        " ",    // underscore
        " - ",  // liniuta
        ") ",   // paranteza inchidere
        ": ",   // doua puncte
        " > ",  // mai mare
        " < ",  // mai mic
        "! ",
        "? ",   
        "* ",
        " & "
    );
    $mytrim = str_replace($rule1, $rule2, $mytrim);
    $rule3 = array(
        " .",   // punct
        " ,",   // virgula
        " ?",   // question mark
        " !",
        " *",
        " )"
    );
    $rule4 = array(
        ".",    // punct
        ",",    // virgula
        "?",    // question mark
        "!",
        "*",
        ")"
    );
    $mytrim = str_replace($rule3, $rule4, $mytrim);
    $mytrim = preg_replace('/\s+/',' ',$mytrim);
    return $mytrim;
}

2 个答案:

答案 0 :(得分:0)

在我看来这是一个编码问题,XML文件默认使用UTF-8,在trim()和preg_replace()

之前尝试使用utf8_decode()
$var = utf8_decode($myxmltext);
$var = trim($var);
$var = preg_replace('/\s+/',' ',$var);

答案 1 :(得分:0)

在你做任何事之前试试这个正则表达式:

preg_replace('/(&)\s+(\w+;)/', '$1$2', $text);

然后开展业务,让我们看看HTML现在是否编码。

所以这将通过改变所有内容来解决HTML编码的主要问题:

& quote;

为:

&quote;

请注意:这可能无法完全按预期工作,所以请测试。

当然,正如其他人所说,你也可以使用utf8_decode / encode来摆脱那些umlet角色。

修改

要解决&符问题,请尝试:

preg_replace('/&(?!\w+;)/', ' & ', $text);

所以这将取代所有&amp;不是&quote;形式的,并且在任何一方给他们一个空格。

与正常情况相同,先测试一下。