爆炸后Strtr()不起作用

时间:2016-11-03 01:02:14

标签: php replace textarea explode

我有一个textarea。点击“提交”后,textarea的日期应该从一行发送到一个数据库。但首先我要替换德国特殊字母(ä,ö,ü,ß)。

我的问题:它不起作用。输出始终为“ä,ö或ü”。但是如果我用静态“ä”替换变量(并且不使用textarea中的数据),则脚本正在运行。 如果我在爆炸后使用textarea中的数据,则脚本不会替换字母。

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

2 个答案:

答案 0 :(得分: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;
}

它对你有用吗?

答案 1 :(得分:0)

mb_ *功能无法替代。在使用strtr()之前,你应该使用iconv()或mb_convert_encoding()。