質問

文字列から不要な文字を削除する簡単な関数を見つけました。

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;
}

この単語 'áのように、アクセントや他の文字に使用する場合é ñ í '次のような疑問符または奇妙な文字を出力します。 http://img217.imageshack.us/img217/6794/59472278.jpgを出力

注意:私はstrclean.php(この関数を含む)とindex.phpを両方ともUTF-8で使用しています。 index.phpは次のようになります。

<!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>

何が間違っているのですか?

役に立ちましたか?

解決

コードをテストしましたが、エラーはstrtolower関数にあります...

次のようにmb_strtolowerに置き換えます

<!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>

他のヒント

使用

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

iconv を試してください。

置換はまったく発生しますか?つまり、事前に$ inputを印刷すると、同じ奇妙な文字が表示されますか?その場合、PHPソースコードファイルの文字セットと入力が一致しないため、置換する前に入力でiconv()を使用する必要がある場合があります。

編集:両方のファイルをウェブサーバーにアップロードし、印刷とクリーニングが正常に機能するようにしました( http://www.tag-am-meer.com/test1/ )。これは、PHP 4.4.9およびFirefox 3.0.6にあります。私の頭に浮かぶより多くの潜在的な問題:

  • Firefoxで動作しますか? IE6(およびおそらくそれ以降のバージョンも)は、HTMLのヘッドセクションの文字セットが小文字(&ut; -8&quot;)で記述されることを期待していることを漠然と覚えています
  • エディターのコードファイルにバイトオーダーマーク(BOM)が含まれていますか?鉱山はそうではなく、おそらくPHPはそれらを窒息させる。
  • HTTPヘッダーを調べて、異常なMIMEタイプなど、何か異常なことが起こっているかどうかを確認できますか? Firefoxの Tamper Data アドオンがこれに役立ちます。

なぜアクセントを削除したいのですか?それらを単に無視したい可能性はありますか?その場合、この回答には、その方法を示すPerlソリューションがあります。 Perlは外国語であることに注意してください。 :)

私は以前にこの問題に直面していましたが、この投稿や途中で見つけた他の人たちのリードをたどろうとしましたが、簡単な解決策はありませんでした。システムで使用している文字セットを知る必要がありますISO-8859-1)そしてこれが私がしたことです:

    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 = 

私は以前にこの問題に直面していましたが、この投稿や途中で見つけた他の人たちのリードをたどろうとしましたが、簡単な解決策はありませんでした。システムで使用している文字セットを知る必要がありますISO-8859-1)そしてこれが私がしたことです:

<*>

これでうまくいきましたが、正しい方法だと思います:)

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);

これでうまくいきましたが、正しい方法だと思います:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top