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

詰め込む前に、この正規表現を試してください。

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

それからあなたのビジネスをしてください、そのHTMLが今エンコードするかどうか見てみましょう。

したがって、これにより、すべてを変更することでHTMLエンコーディングの主な問題を解決できます。

& quote;

に:

&quote;

注意:これは期待どおりに機能しない可能性があるため、テストしてください。

もちろん、他の人が言うように、それらのumlet文字を取り除くためにutf8_decode/encodeもできます。

編集

アンパサンドの問題を解決するには、次のことを試してください。

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

したがって、これはフォームにないすべての&を置き換え、&quote;両側にスペースを与えます。

通常と同じように、最初にテストします。

于 2012-08-24T22:46:22.037 に答える
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 に答える