проблема кодирования php и utf-8 с немецкими буквами - PullRequest
1 голос
/ 09 июля 2011

Проблема: я нашел php-код (игра в палач) и хочу, чтобы он работал на немецком языке, но он выводит A � � ���BCF вместо следующих букв: Ü Ä Ö

Как можноя исправляю это .. и использую только кодировку utf-8 ??

вот весь код:

<?php
$Category = "Web Programming";

$list = "VERSCHLÜSSELUNG";

$alpha = "AÜÄÖÇBCDEFGHIJKLMNOPQRSTUYVWXYZ";

$additional_letters = " -.,;!?%&0123456789";
mb_internal_encoding("UTF-8");
 $len_alpha = mb_strlen($alpha);
if(isset($_GET["n"])) $n=$_GET["n"];
if(isset($_GET["letters"])) $letters=$_GET["letters"];
if(!isset($letters)) $letters="";
if(isset($PHP_SELF)) $self=$PHP_SELF;
else $self=$_SERVER["PHP_SELF"];

$links="";
$max=6;     # maximum number of wrong
# error_reporting(0);

$words = explode("\n",$list);
srand ((double)microtime()*1000000);
$all_letters=$letters.$additional_letters;
$wrong = 0;

if (!isset($n)) { $n = rand(1,count($words)) - 1; }
$word_line="";
$word = trim($words[$n]);
$done = 1;


for ($x=0; $x < mb_strlen($word); $x++)
{
  if (strstr($all_letters, $word[$x]))
  {
    if ($word[$x]==" ") $word_line.="&nbsp; "; else $word_line.=$word[$x];
  } 
  else { $word_line.="_<font size=1>&nbsp;</font>"; $done = 0; }
}


if (!$done)
{
  for ($c=0; $c<$len_alpha; $c++)
  {
    if (mb_strstr($letters, $alpha[$c]))

    {
     if (mb_strstr($words[$n], $alpha[$c]))
 {$links .= "\n<B>$alpha[$c]</B> ";  
}

      else { $links .= "\n<FONT color=\"red\">$alpha[$c] </font>"; $wrong++; 
}
    }
    else
    { 
$links .= "\n<A HREF=\"$self?letters=$alpha[$c]$letters&n=$n\">$alpha[$c]</A> "; 
}
  }
 $nwrong=$wrong; if ($nwrong>6) $nwrong=6;
  echo "\n<p><BR>\n<IMG SRC=\"hangman_$nwrong.gif\" ALIGN=\"MIDDLE\" BORDER=0 WIDTH=110 HEIGHT=185 ALT=\"Wrong: $wrong out of $max\">\n";
  if ($wrong >= $max)
  {
    $n++;
    if ($n>(count($words)-1)) $n=0;
    echo "<BR><BR><H1><font size=5>\n$word_line</font></H1>\n";
    echo "<p><BR><FONT color=\"red\"><BIG>You Lost!</BIG></FONT><BR><BR>";
    if (strstr($word, " ")) $term="fraz?"; else $term="?odis";
    echo "The word was \"<B>$word</B>\"<BR><BR>\n";
    echo "<A HREF=$self?n=$n>Play Again... </A>\n\n";
  }
  else
  {
    echo " &nbsp; Remaining guesses: <B>".($max-$wrong)."</B><BR>\n";
    echo "<H1><font size=5>\n$word_line</font></H1>\n";
    echo "<P><BR>Please choose a letter: <BR><BR>\n";
       echo "<font size=3> $links \n</font>";
  }
}

    else
    {
      $n++; # get next word
      if ($n>(count($words)-1)) $n=0;
      echo "<BR><BR><H1><font size=5>\n$word_line</font></H1>\n";
      echo "<P><BR><BR><B><font color=red  size=2>You Won</font></B><BR><BR><BR>\n";
      echo "<A HREF=$self?n=$n>Play Again... </A>\n\n";
    }
    ?>

Ответы [ 5 ]

4 голосов
/ 09 июля 2011

Это неправильно при работе с многобайтовыми кодировками:

$alpha[$c]

Это адрес одного байта в $alpha, а не одного символа. Используйте mb_substr вместо:

mb_substr($alpha, $c, 1);
1 голос
/ 25 ноября 2014

Для немецких слов нам нужно использовать кодировку ISO-8859, которая совместима с европейскими словами. Это решение работало для меня до кодирования JSON.

$finalString = htmlentities($GermanWord,ENT_QUOTES | ENT_IGNORE | ENT_SUBSTITUTE | ENT_DISALLOWED | ENT_HTML401 | ENT_XML1 | ENT_XHTML | ENT_HTML5, "ISO-8859-1");

Вы также можете закодировать строку с UTF-8 для html ISO-8859-1 не работает

см. Этот документ http://php.net/manual/en/function.htmlentities.php для изменения параметров кодирования.

1 голос
/ 09 июля 2011

Большинство браузеров в наши дни игнорируют мета-теги типа контента.Нет необходимости использовать их.Вам нужно сделать фактический заголовок страницы, используя php перед любым выводом:

header("Content-type: text/html; charset=UTF-8");
0 голосов
/ 22 сентября 2017

Используйте это.

mb_strtolower(mb_convert_encoding($_POST['entered_key'], 'UTF-8', 'UTF-8'), 'UTF-8')
0 голосов
/ 09 июля 2011

вам нужно указать utf8 в вашем HTML:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...