0

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

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

出于某种原因,当我回显它时,我会得到这样的“原始 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;
}
4

2 回答 2

0

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

$var = utf8_decode($myxmltext);
$var = trim($var);
$var = preg_replace('/\s+/',' ',$var);
于 2012-08-24T22:43:39.767 回答
0

在你做你的东西之前试试这个正则表达式:

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

然后做你的事,让我们看看那个 HTML 是否现在编码。

因此,这将通过更改所有内容来解决您的 HTML 编码的主要问题:

& quote;

到:

&quote;

请注意:这可能无法完全按预期工作,因此请进行测试。

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

编辑

要解决与号问题,请尝试:

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

因此,这将替换所有不在表格中的 & 并在&quote;两边留出空间。

和正常一样,先测试一下。

于 2012-08-24T22:46:22.037 回答