Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Mielenkiintoinen merkkien koodausongelma verkkosivulla

multigamerr85 [12.09.2017 09:45:51]

#

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);

?>
<!DOCTYPE html>
<html>
<title>Jee</title>
<body>




<?php

  $maara = count($kirjaimet);


  for ($i=0; $i < $maara; $i++) {
    # code...
    echo $kirjaimet[$i];
  }

  echo '<br>';

  for ($i=0; $i < $maara; $i++) {
    # code...
    echo $kirjaimet[$i].'|';
  }

   ?>


</body>
</html>

Grez [12.09.2017 10:35:35]

#

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.

multigamerr85 [12.09.2017 10:59:01]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta