Moro! Minulla olisi aika jännä ongelma:
Eli, haen satunnaisen sanan Kotimaisten kielten keskuksen nykysuomen sanalistasta (löytyy täältä: http://kaino.kotus.fi/sanat/nykysuomi/) ja pätkin sanan merkit taulukkoon str_split()-funktiolla.
Tämän suorituksen jälkeen tulostan sanan merkki merkiltä.
Ongelmana on se, että jos merkin vieressä on kuten koodista käy ilmi, '|'-merkki, niin merkki muuttuu tämmöiseksi: �
Jos merkin vieressä ei ole mitään, niin silloin se näkyy normaalisti.
Tämä on omasta mielestäni aika ihmeellinen homma. Olen yrittänyt kaikenlaisia ratkaisuja, mutta en ole saanut tätä ongelmaa lähtemään.
Ja ongelma koskee oikeastaan ä,ö ja muita ns.erikoisempia merkkejä.
Jos joku osaavampi osaisi auttaa niin olisin kiitollinen.
Tässä alla vielä koodini kokonaisuudessaan jota käytän. PHP-koodi tulee ennen HTML-koodia ja HTML-koodin sisällä on loput PHP-koodistani:
<?php session_start(); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); $xml=simplexml_load_file("sanalista.xml") or die("Error: Cannot create object"); $maara = count($xml->st); $rand = rand(0,count($xml->st)); $sana = $xml->st[$rand]->s; $sana = (string)$sana; $kirjaimet = str_split($sana); ?>
multigamerr85 kirjoitti:
sanalistasta (löytyy täältä: http://kaino.kotus.fi/sanat/nykysuomi/) ja pätkin sanan merkit taulukkoon str_split()-funktiolla.
Sivulla sanotaan "Sanalista on XML-muodossa ja merkistönä on UTF-8."
Eli ehkä olisi järkevää käyttää str_split() -funktion asemesta mb_split() -funktiota.
https://www.php.net/str_split:
Note:
str_split() will split into bytes, rather than characters when dealing with a multi-byte encoded string.
Kiitoksia avusta. Lähdin etsimään verkosta tietoja antamastasi funktiosta, ja löysin seuraavanlaisen ratkaisun:
$kirjaimet = preg_split('//u', $sana, null, PREG_SPLIT_NO_EMPTY);
Tällä tavoin sain ohjelman toimimaan kuten halusin.
Ratkaisu löytyi täältä: https://www.php.net/manual/en/function.mb-split.php#117588
Ongelma on nyt ratkaistu. Kiitoksia paljon.
Aihe on jo aika vanha, joten et voi enää vastata siihen.