Autor Zpráva
Mozkomor05
Profil
Dobrý den, chtěl jsem naprogramovat hru šibenici s diakritikou, aby při kliknutí na písmeno A se ve slově tráva zobrazilo A i Á. Místo toho se mi v písmenech zobrazí Á zvlášť. Poradíte mi, jak mám udělat, aby se všechny tlačítka při kliknutí zobrazovaly i s diakritikou?

Kód zde: (Zatím jsem to zkoušel pouze s písmenem a)
<?php
$file_parole = 'slova.txt';


$alfabeto = array(
        'A'=>'a',
        'Á'=>'á',
        'B'=>'b',
        'C'=>'c',
        'D'=>'d',
        'E'=>'e',
        'F'=>'f',
        'G'=>'g',
        'H'=>'h',
        'I'=>'i',
        'J'=>'j',
        'K'=>'k',
        'L'=>'l',
        'M'=>'m',
        'N'=>'n',
        'O'=>'o',
        'P'=>'p',
        'Q'=>'q',
        'R'=>'r',
        'S'=>'s',
        'T'=>'t',
        'U'=>'u',
        'V'=>'v',
        'W'=>'w',
        'X'=>'x',
        'Y'=>'y',
        'Z'=>'z');
session_start ();


function ScegliParola ($file_parole) {
 $content = file ($file_parole);
 $numero_parole = (count ($content)-1);
 $posizione_parola = rand (0, ($numero_parole));
 $linea = $content[$posizione_parola];
 $parola = rtrim ($linea);
 return ($parola);
}


function CalcolaIndovinata ($parola, $escludi, $alfabeto) {
 $alfabeto = array_flip ($alfabeto);
 $escluse = strtr ($escludi, $alfabeto);
 $escluse = '['.$escluse.']';
 $escluse = ereg_replace ($escluse, '', '[AÁBCDEFGHIJKLMNOPQRSTUVWXYZ]');
 $indovinata = ereg_replace ($escluse, '_', $parola);
 return $indovinata;                      
}                                         


function TrovaLettera ($lettera, $parola, $scelte, $alfabeto) {
 $alfabeto = array_flip ($alfabeto);      
 $lettera = strtr ($lettera, $alfabeto);  
 $scelte.= $lettera;                      
 if (ereg ($lettera, $parola)) {          
  $controllo = true;                      
 }                                        
 else {                                   
  $controllo = false;                     
 }                                        
 $risposta = array ($scelte, $controllo); 
 return $risposta;                        
}                                         


if (isset($_GET['letter']) and isset($_SESSION['gchangman'])) {
 $variab = explode ('/', $_SESSION['gchangman']);
 $indovina = $variab[0];                  
 $scelte = $variab[1];                    
 $tentativi = $variab[2];                 
 $checklet = TrovaLettera ($_GET['letter'], $indovina, $scelte, $alfabeto);
 $scelte = $checklet[0];                  
 if (!$checklet[1]) {                     
  $tentativi = $tentativi +1;             
 }                                        
 $indovinata = CalcolaIndovinata ($indovina, $scelte, $alfabeto);
}                                         
else {
 $tentativi=0;                            
 $scelte = ('_');
 $indovina = ScegliParola ($file_parole);
 $indovinata = CalcolaIndovinata ($indovina, $scelte, $alfabeto);
}

$_SESSION['gchangman'] = ($indovina.'/'.$scelte.'/'.$tentativi);

?>
<!DOCTYPE>
<html>
<head>
<title>Šibenice</title>
</head>
<body>
<?php

print ('<img src="images/sibenice/hang_'.($tentativi+1).'.gif" border="0" width="100" height="100" title="Špatně '.$tentativi.'/6"><br><br>');
$caratteri = preg_split('//', $indovinata, -1, PREG_SPLIT_NO_EMPTY);
foreach ($caratteri as $lettalf) {
 $lettalf = strtr ($lettalf, $alfabeto);
 if ($lettalf==' ') {
  print ('&nbsp;&nbsp;&nbsp;&nbsp;');
 }
 else {
  print ('<span style="font-size:30;text-transform:uppercase;">'.$lettalf.'</span>');
 }
 print ('&nbsp;&nbsp;');
}
print ('<br><br>');

if ($indovina!=$indovinata) {
 if ($tentativi>=6) {
  print ('<span style="color:red;">Bohužel jste vyplýtvali všechny pokusy. Správné slovo je: '.$indovina.'</span>');
 }
 else {
  $scelt = preg_split('//', $scelte, -1, PREG_SPLIT_NO_EMPTY);
  print ('<br>');
  foreach ($alfabeto as $lettalf) {
   $contrl = false;
   foreach ($scelt as $lett) {
    if (!strcasecmp ($lettalf, $lett)) {
     $contrl = true;
    }
   }
   if ($contrl) {
    print ('<span style="font-size:30;color:red;text-decoration:none;text-transform:uppercase;">'.$lettalf.'&nbsp;</span>');
   }
   else {
    print ('<a HREF="sibenice.php?letter='.$lettalf.'"style="text-decoration:none;"><span style="font-size:30;text-transform:uppercase;color:black;">'.$lettalf.'&nbsp;</span></a>');
   }
   if ($lettalf=='m') {
    print ('<br>');
   }
  }
 }
}
else {
 print ('<span style="color:green;">Blahopřeji, našli jste správné slovo</style>');
}

?>
<br>
<p><?php print ('<A HREF="sibenice.php">'); ?>Nová hra</a></p>
</body>
</html>
Keeehi
Profil
Udělej prosím něco s tou obfuskací italštinou. Přelož to prosím buď do češtiny, nebo lépe do angličtiny.
Mozkomor05
Profil
<?php
$soubor_slova = 'slova.txt';


$abeceda = array(
        'A'=>'a',
        'Á'=>'á',
        'B'=>'b',
        'C'=>'c',
        'D'=>'d',
        'E'=>'e',
        'F'=>'f',
        'G'=>'g',
        'H'=>'h',
        'I'=>'i',
        'J'=>'j',
        'K'=>'k',
        'L'=>'l',
        'M'=>'m',
        'N'=>'n',
        'O'=>'o',
        'P'=>'p',
        'Q'=>'q',
        'R'=>'r',
        'S'=>'s',
        'T'=>'t',
        'U'=>'u',
        'V'=>'v',
        'W'=>'w',
        'X'=>'x',
        'Y'=>'y',
        'Z'=>'z');
session_start ();


function VybratSlovo ($soubor_slova) {
 $obsah = file ($soubor_slova);
 $cislo_slova = (count ($obsah)-1);
 $umisteni_slova = rand (0, ($cislo_slova));
 $radek = $obsah[$umisteni_slova];
 $slovo = rtrim ($radek);
 return ($slovo);
}


function VypocetHadani ($slovo, $vyloucit, $abeceda) {
 $abeceda = array_flip ($abeceda);
 $vylouceno = strtr ($vyloucit, $abeceda);
 $vylouceno = '['.$vylouceno.']';
 $vylouceno = ereg_replace ($vylouceno, '', '[AÁBCDEFGHIJKLMNOPQRSTUVWXYZ]');
 $hadal = ereg_replace ($vylouceno, '_', $slovo);
 return $hadal;            
}                                         


function NajitPismeno ($pismeno, $slovo, $volba, $abeceda) {
 $abeceda = array_flip ($abeceda);      
 $pismeno = strtr ($pismeno, $abeceda);  
 $volba.= $pismeno;                      
 if (ereg ($pismeno, $slovo)) {          
  $ovladani = true;                      
 }                                        
 else {                                   
  $ovladani = false;                     
 }                                        
 $odpoved = array ($volba, $ovladani); 
 return $odpoved;                        
}                                         


if (isset($_GET['letter']) and isset($_SESSION['gchangman'])) {
 $variab = explode ('/', $_SESSION['gchangman']);
 $odhallit = $variab[0];                  
 $volba = $variab[1];                    
 $pokusy = $variab[2];                 
 $kontrola = NajitPismeno ($_GET['letter'], $odhallit, $volba, $abeceda);
 $volba = $kontrola[0];                  
 if (!$kontrola[1]) {                     
  $pokusy = $pokusy +1;             
 }                                        
 $hadal = VypocetHadani ($odhallit, $volba, $abeceda);
}                                         
else {
 $pokusy=0;                            
 $volba = ('_');
 $odhallit = VybratSlovo ($soubor_slova);
 $hadal = VypocetHadani ($odhallit, $volba, $abeceda);
}

$_SESSION['gchangman'] = ($odhallit.'/'.$volba.'/'.$pokusy);

?>
<!DOCTYPE>
<html>
<head>
<title>Šibenice</title>
</head>
<body>
<?php

print ('<img src="images/sibenice/hang_'.($pokusy+1).'.gif" border="0" width="100" height="100" title="Špatně '.$pokusy.'/6"><br><br>');
$znaky = preg_split('//', $hadal, -1, PREG_SPLIT_NO_EMPTY);
foreach ($znaky as $pisvabc) {
 $pisvabc = strtr ($pisvabc, $abeceda);
 if ($pisvabc==' ') {
  print ('&nbsp;&nbsp;&nbsp;&nbsp;');
 }
 else {
  print ('<span style="font-size:30;text-transform:uppercase;">'.$pisvabc.'</span>');
 }
 print ('&nbsp;&nbsp;');
}
print ('<br><br>');

if ($odhallit!=$hadal) {
 if ($pokusy>=6) {
  print ('<span style="color:red;">Bohužel jste vyplýtvali všechny pokusy. Správné slovo je: '.$odhallit.'</span>');
 }
 else {
  $vyber = preg_split('//', $volba, -1, PREG_SPLIT_NO_EMPTY);
  print ('<br>');
  foreach ($abeceda as $pisvabc) {
   $contrl = false;
   foreach ($vyber as $lett) {
    if (!strcasecmp ($pisvabc, $lett)) {
     $contrl = true;
    }
   }
   if ($contrl) {
    print ('<span style="font-size:30;color:red;text-decoration:none;text-transform:uppercase;">'.$pisvabc.'&nbsp;</span>');
   }
   else {
    print ('<a HREF="sibenice.php?letter='.$pisvabc.'"style="text-decoration:none;"><span style="font-size:30;text-transform:uppercase;color:black;">'.$pisvabc.'&nbsp;</span></a>');
   }
   if ($pisvabc=='m') {
    print ('<br>');
   }
  }
 }
}
else {
 print ('<span style="color:green;">Blahopřeji, našli jste správné slovo</style>');
}

?>
<br>
<p><?php print ('<A HREF="sibenice.php">'); ?>Nová hra</a></p>
</body>
</html>
Martin2
Profil *
Spolehlivá transliterace do ASCII je ošemetná věc, především nad celou hlavní UTF-8 abecedou. Určitě bych sáhl po hotovém řešení. Třeba v Nette\Utils\Strings
Mozkomor05
Profil
Nechápu jak to myslíš to co jsem potřeboval jsem tam nenašel
Keeehi
Profil
Mozkomor05:
Tak jsem si to zkusil a zajímavé je, že třeba u e to na diakritiku nekouká.
Jinak je to dost starý kód, funkce ereg_replace() je od PHP 5.3 označená za zastaralou a v PHP 7 je už odstaněná.
Takže jsem to vzal a rovnou to celé přepsal.
<?php
session_start ();

$wordsFile = 'slova.txt';
 
 
$alphabet = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
                  'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
        
function toAscii($s) {
    $transliterator = NULL;
    if (class_exists('Transliterator', FALSE)) {
        $transliterator = Transliterator::create('Any-Latin; Latin-ASCII');
    }

    $s = preg_replace('#[^\x09\x0A\x0D\x20-\x7E\xA0-\x{2FF}\x{370}-\x{10FFFF}]#u', '', $s);
    $s = strtr($s, '`\'"^~?', "\x01\x02\x03\x04\x05\x06");
    $s = str_replace(
        array("\xE2\x80\x9E", "\xE2\x80\x9C", "\xE2\x80\x9D", "\xE2\x80\x9A", "\xE2\x80\x98", "\xE2\x80\x99", "\xC2\xB0"),
        array("\x03", "\x03", "\x03", "\x02", "\x02", "\x02", "\x04"), $s
    );
    if ($transliterator !== NULL) {
        $s = $transliterator->transliterate($s);
    }
    if (ICONV_IMPL === 'glibc') {
        $s = str_replace(
            array("\xC2\xBB", "\xC2\xAB", "\xE2\x80\xA6", "\xE2\x84\xA2", "\xC2\xA9", "\xC2\xAE"),
            array('>>', '<<', '...', 'TM', '(c)', '(R)'), $s
        );
        $s = @iconv('UTF-8', 'WINDOWS-1250//TRANSLIT//IGNORE', $s); // intentionally @
        $s = strtr($s, "\xa5\xa3\xbc\x8c\xa7\x8a\xaa\x8d\x8f\x8e\xaf\xb9\xb3\xbe\x9c\x9a\xba\x9d\x9f\x9e"
            . "\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3"
            . "\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8"
            . "\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe"
            . "\x96\xa0\x8b\x97\x9b\xa6\xad\xb7",
            'ALLSSSSTZZZallssstzzzRAAAALCCCEEEEIIDDNNOOOOxRUUUUYTsraaaalccceeeeiiddnnooooruuuuyt- <->|-.');
        $s = preg_replace('#[^\x00-\x7F]++#', '', $s);
    } else {
        $s = @iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $s); // intentionally @
    }
    $s = str_replace(array('`', "'", '"', '^', '~', '?'), '', $s);
    return strtr($s, "\x01\x02\x03\x04\x05\x06", '`\'"^~?');
}
 
function getRandomWord($file) {
    $words = file($file);
    $wordIndex = rand (0, count($words) - 1);
    return trim($words[$wordIndex]);
}

function hideUnknown($word, $known) {
    $known = strtolower($known);
    $wordAsLetters = preg_split('//u', $word, -1, PREG_SPLIT_NO_EMPTY);
    $wordLength = count($wordAsLetters);
    $result = '';
    for ( $i = 0 ; $i < $wordLength ; $i++ ) {
        if (strpos($known, strtolower(toAscii($wordAsLetters[$i]))) === FALSE) {
            $result .= '_';
        } else {
            $result .= $wordAsLetters[$i];
        }
    }
    return $result;
}

function numberOfWrongGuesses($word, $known) {
    return strlen(preg_replace('/['.preg_quote(strtolower(toAscii($word)), '/').']/', '', strtolower($known)));
}
 
if (isset($_SESSION['gchangman'])) {
    $word = $_SESSION['gchangman']['word'];
    $guessedLetters = $_SESSION['gchangman']['guessedLetters'];
} else {
    $word = $_SESSION['gchangman']['word'] = getRandomWord($wordsFile);
    $guessedLetters = $_SESSION['gchangman']['guessedLetters'] = '';
}

if (isset($_GET['letter'])) {
    $guessedLetter = substr(strtolower(toAscii($_GET['letter'])), 0, 1);
    if (strpos($guessedLetters, $guessedLetter) === FALSE) {
        $_SESSION['gchangman']['guessedLetters'] = $guessedLetters .= $guessedLetter;
    }
} else {
    $word = $_SESSION['gchangman']['word'] = getRandomWord($wordsFile);
    $guessedLetters = $_SESSION['gchangman']['guessedLetters'] = '';
}

$wrongGuesses = numberOfWrongGuesses($word, $guessedLetters);
$hiddenWord = hideUnknown($word, $guessedLetters);
?>
<!DOCTYPE>
<html>
<head>
<title>Šibenice</title>
<style>
.green {
     color: green;
}

.red {
     color: red;
}

.big {
    font-size: 30px;
}

.letters a {
    text-decoration: none;
}

.letters span {
     color: red;
}

a:visited {
    color: blue;
}
</style>
</head>
<body>
<img src="images/sibenice/hang_<?php echo $wrongGuesses + 1; ?>.gif" border="0" width="100" height="100" title="Špatně <?php echo $wrongGuesses; ?>/6"><br>
<br>
<span class="big">Slovo: <?php echo $hiddenWord; ?></span><br>
<span class="big">Hádané: <?php echo implode(' ', str_split(strtoupper($guessedLetters))); ?></span><br>
<br>
<?php
if ($hiddenWord === $word) {
    echo "<span class=\"green\">Blahopřeji, našli jste správné slovo. ($word)</style>";
} elseif ( $wrongGuesses >= 6 ) {
    echo "<span class=\"red\">Bohužel jste vyplýtvali všechny pokusy. Hledané slovo bylo: $word</span>";
} else {
    echo "<span class=\"letters big\">\n";
    foreach ($alphabet as $letter) {
        if (strpos($guessedLetters, $letter) === FALSE) {
            echo '<a href="sibenice.php?letter='.$letter.'">'.strtoupper($letter).'</a>'.($letter !== 'm' ? '&nbsp;' : '<br>')."\n";
        } else {
            echo '<span>'.strtoupper($letter).'</span>'.($letter !== 'm' ? '&nbsp;' : '<br>')."\n";
        }
    }
    echo '</span>';
}
?>
<br>
<p><a href="sibenice.php">Nová hra</a></p>
</body>
</html>
Mozkomor05
Profil
Díky a neporadil by jsi mi i v javascriptu? Odkaz na vlákno zde: Hra šibenice s diakritikou

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: