2016-11-03 3 views
0

私はテキストエリアを持っています。 "提出"をクリックした後、テキストエリアから日付を行から行にデータベースに送信する必要があります。しかし、まず私はドイツの特殊文字(ä、ö、ü、ß)を置き換えたいと思います。爆発後にStrtr()が機能しません

問題:動作しません。出力は常に「ä、öまたはü」です。しかし、変数を静的な "ä"(テキストエリアのデータを使用しないでください)に置き換えると、スクリプトが動作しています。 爆発の後にテキストエリアからデータを使用すると、スクリプトは文字を置き換えません。

<form action="kategorie-add.php" method="POST"> 
    <textarea name="kategorien"></textarea><br> 
    KAT-NR: <input type="text" name="genre"><br> 
    <input type="submit" name="submit" value="Senden"> 

</form> 
<?php 

if($_POST['submit']){ 

    $msg = explode("\r\n", $_POST['kategorien']); 
    foreach($msg as $zeile){ 

     $ers = array(

       'Ä' => 'Ae', 
       'Ö' => 'Oe', 
       'Ü' => 'Ue', 
       'ä' => 'ae', 
       'ö' => 'oe', 
       'ü' => 'ue', 
       'ß' => 'ss' 
     ); 
     $PfadDoc = strtr($zeile,$ers); 

     //This is working: 
     //$PfadDoc = strtr('ä',$ers); 

     echo $PfadDoc 
    ?> 
+0

'implode'はどこですか? – chris85

+0

可能な複製http://stackoverflow.com/questions/2758736/multibyte-strtr-mb-strtr? – WEBjuju

+0

ファイルが 'UTF-8'エンコーディングで保存されていることを確認してください。また、あなたのブラウザは' UTF-8'エンコーディングでサイトを見ています。 – Dekel

答えて

1

ソリューションがあります:https://www.liketly.com/forum/thread/32385/multibyte-strtr-mb_strtr/

function my_strtr($inputStr, $from, $to, $encoding = 'UTF-8') { 
     $inputStrLength = mb_strlen($inputStr, $encoding); 

     $translated = ''; 

     for($i = 0; $i < $inputStrLength; $i++) { 
       $currentChar = mb_substr($inputStr, $i, 1, $encoding); 

       $translatedCharPos = mb_strpos($from, $currentChar, 0, $encoding); 

       if($translatedCharPos === false) { 
         $translated .= $currentChar; 
       } 
       else { 
         $translated .= mb_substr($to, $translatedCharPos, 1, $encoding); 
       } 
     } 

     return $translated; 
} 

それはあなたのために動作しますか?

+0

'mb_strtr()'関数はありません。 – Barmar

+0

タイトルにはタイプミスがあり、質問のコードを読んでください。 – Barmar

+0

ああ、私はそれを参照してください.. – Kirby

0

mb_ *関数は置換を代償することはできません。 strtr()を使用する前に、iconv()またはmb_convert_encoding()を使用する必要があります。

関連する問題