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

person DwzE    schedule 03.11.2016    source источник
comment
Где implode?   -  person chris85    schedule 03.11.2016
comment
возможный дубликат stackoverflow.com/questions/2758736/multibyte-strtr-mb -стртр ?   -  person WEBjuju    schedule 03.11.2016
comment
Убедитесь, что ваш файл сохранен в кодировке UTF-8, а также ваш браузер просматривает сайт в кодировке UTF-8.   -  person Dekel    schedule 03.11.2016
comment
Есть ли в вашем HTML тег meta с кодировкой? Правильно ли вы устанавливаете заголовок Content-Type?   -  person user2182349    schedule 03.11.2016


Ответы (2)


Есть решение: 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;
}

Работает ли это для вас?

person Kirby    schedule 03.11.2016
comment
Нет функции mb_strtr(). - person Barmar; 03.11.2016

Функции mb_* не могут быть заменены. Вы должны использовать iconv() или mb_convert_encoding() перед использованием strtr().

person 李德康    schedule 03.11.2016