Frage

Ich fand eine einfache Funktion zum entfernen Sie einige unerwünschte Zeichen aus einem string.

function strClean($input){

$input = strtolower($input);
$b = array("á","é","í","ó","ú", "ñ", " "); //etc...
$c = array("a","e","i","o","u","n", "-"); //etc...

$input = str_replace($b, $c, $input);

return $input;
}

Wenn ich es benutze, über Akzenten oder anderen Zeichen, wie das Wort 'á é ñ í' es gibt diejenigen, Fragezeichen oder seltsame Zeichen, wie:Ausgabe http://img217.imageshack.us/img217/6794/59472278.jpg

Hinweis:Ich bin mit strclean.php (mit dieser Funktion) und index.php sowohl in UTF-8.index.php sieht wie folgt aus:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title></title>
</head>
<body>
    <?php
    include('strclean.php');

    echo 'óóóáà';
    echo strClean('óóóáà');


    ?>
</body>
</html>

Was mache ich falsch?

War es hilfreich?

Lösung

Ich habe den Code getestet und Fehler in strtolower Funktion ...

Ersetzen Sie es mit mb_strtolower, wie unten

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
</head>
<body>

<?php
    function strClean($input) {
        $input = mb_strtolower($input, 'UTF-8');
        $b = array("á","é","í","ó","ú", "n", " ");
        $c = array("a","e","i","o","u","n", "-");
        return str_replace($b, $c, $input);
    }

    $string = 'á é í ó ú n abcdef ghij';
    echo $string ."<br />". strClean($string);
?>

</body>
</html>

Andere Tipps

Mit

iconv('UTF-8', 'ASCII//TRANSLIT', $input);

Möchten Sie folgendes versuchen: iconv .

Nicht ein Ersatz sein, D. H.tun Sie erhalten die gleiche komische Zeichen beim drucken von $input vorher?Wenn ja, werden die Zeichensätze von Ihrem PHP-Quellcode-Datei und die Eingabe nicht übereinstimmen, und Sie müssen, um verwenden iconv() auf den Eingang vor zu ersetzen.

edit: Ich nahm beide Ihre Dateien, die Sie hochgeladen, um meinen webserver und drucken und Reinigung der gut arbeitet (siehe http://www.tag-am-meer.com/test1/).Dies ist auf PHP 4.4.9 sowie Firefox 3.0.6.Weitere potenzielle Probleme, die mir einfallen:

  • Funktioniert es für Sie auf Firefox?Ich erinnere mich vage daran, dass IE6 (und wahrscheinlich spätere Versionen) erwarten das charset in HTML-head-Bereich geschrieben werden, in Kleinbuchstaben ("utf-8")
  • Hat Ihr Editors byte order Mark (BOM) in das code-Dateien?Mir nicht, vielleicht PHP drosseln auf diesen.
  • Kann man sich die HTTP-Header zu sehen, ob es etwas ungewöhnliches Los ist, wie eine schlechte MIME-Typ?Die Tamper Data add-on für Firefox, kann Ihnen dabei helfen.

Warum wollen Sie Akzente entfernen? Ist es möglich, dass man sie einfach ignorieren will? Wenn ja, diese Antwort eine Perl-Lösung hat, das, wie das tun demonstriert. Beachten Sie, dass das Perl in einer Fremdsprache ist. :)

Ich fand mich mit diesem Problem vor, und ich versuchte, die Leitungen von diesem Post und andere zu folgen ich auf dem Weg zu finden und es gab keine einfache Lösung, weil du die charset wissen müssen, dass Ihr System (in meinem Fall verwendet ISO-8859-1), und dies ist das, was ich getan habe:

    function quit_accenture($str){
      $pattern = array();
      $pattern[0] = '/[Á|Â|À|Å|Ä]/';
      $pattern[1] = '/[É|Ê|È]/';
      $pattern[2] = '/[Í|Î|Ì|Ï]/';
      $pattern[3] = '/[Ó|Ô|Ò|Ö]/';
      $pattern[4] = '/[Ú|Û|Ù|Ü]/';
      $pattern[5] = '/[á|â|à|å|ä]/';
      $pattern[6] = '/[ð|é|ê|è|ë]/';
      $pattern[7] = '/[í|î|ì|ï]/';
      $pattern[8] = '/[ó|ô|ò|ø|õ|ö]/';
      $pattern[9] = '/[ú|û|ù|ü]/';
      $replacement = array();
      $replacement[0] = 'A';
      $replacement[1] = 'E';
      $replacement[2] = 'I';
      $replacement[3] = 'O';
      $replacement[4] = 'U';
      $replacement[5] = 'a';
      $replacement[6] = 'e';
      $replacement[7] = 'i';
      $replacement[8] = 'o';
      $replacement[9] = 'u';
      return preg_replace($pattern, $replacement, $str);
    }
    $txt = $_POST['your_htmled_text'];
    //Convert to your system's charset. I checked this on the php.ini
    $txt = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $txt);
    //Apply your function
    $txt = quit_accenture($txt);
    //output
    print_r($txt);

Das funktionierte für mich, aber ich denke, auch der richtige Weg ist:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top