2013-04-10 2 views
1

У меня возникли трудности с приложением, которое я пишу, используя PHP. Цель приложения - обучающая игра с открытым исходным кодом с поддержкой сенсорного экрана (с использованием jQuery mobile). Игра отлично работала с strcasecmp(), сравнивая записи в базе данных с выбранными ответами (пользователи никогда не вводят данные сами, они выбирают только выбор, поэтому нет проблемы с санитаризацией, поскольку выбор поступает непосредственно из базы данных). Однако, когда я добавил возможность включать специальные символы, такие как Ω и β, strcasecmp() больше не работал. Естественно, я предположил, что функция не сможет сравнивать такие символы. После интенсивных исследований я попробовал preg_match и mb_ereg_match, и пока они работали нормально для регулярных вопросов, опять же, они не будут правильно отвечать на вопросы со специальными символами в них. Прямо сейчас, вот что я должен сравнить выбранный выбор с записью базы данных:Специальный символ (например, omega и beta) соответствие строк в PHP

$selAnswer = $_POST['mainanswer'];//asign from POST form 

if (mb_ereg_match($selAnswer, $_SESSION['right']) == TRUE) //if the choice matches the right answer 
{ 
    //do right answer operations 
} 
else //if the question does not match 
{ 
    //do wrong answer operations 
} 

Так опять же, он прекрасно работает с регулярными строками, но не со специальными символами. Есть ли что-нибудь, что я могу сделать, чтобы успешно совместить эти персонажи? Один из вариантов использования - это класс химии, и им обязательно нужно будет добавлять специальные символы, такие как омега и бета и т. Д. Я ценю любую помощь, которую кто-либо может дать.

UPDATE:

С проводкой весь код игры будет очень долго, для справки каждого, общий процесс заключается в следующем: простая форма HTML представляет вопросы в базе данных MySQL. Специальные символы вставляются с использованием настраиваемой версии TinyMCE, которая позволяет форматировать полужирный, подчеркивающий, курсив и специальные символы. Пример того, что она выглядит в базе данных заключается в следующем:

β is the right answer 

Таким образом, после того, как данные в базе данных, код игры выбирает случайный вопрос и представляет один правильный ответ и четыре неправильно. Если выбранный ответ и ответ базы данных совпадают, им присваивается точка. Игра сделана с сенсорным интерфейсом jQuery mobile, но это единственная особенность в коде. Остальное - это всего лишь PHP/JS, написанный в TextWrangler.

ответ

0

Я пробовал:

<?php 

$special = "Ω and β"; 
$right_answer = "Ω and β"; 

//Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal. 
if (strcasecmp($special, $right_answer) == 0) { 
    echo "You're right!"; 
} else { 
    echo "Sorry, try again"; 
} 

?> 

и получил это:

Вы правы!

Я что-то не хватает?

+0

Думаю, я мог бы видеть, что происходит не так. Я попробовал свой код, и он сработал, но мой текстовый редактор (TextWrangler) предупредил меня, что некоторые символы не будут сохранены, и что мне пришлось переключиться на UTF-8. Итак, я позволил этому изменить это и загрузить его на мой хост, и, конечно же, он работает так же, как и ваш. Я попытался преобразовать свой PHP-файл (код выше) в UTF-8, но совпадение все еще не срабатывало корректно. Возможно, мне нужно преобразовать весь проект. Есть ли какой-либо конкретный способ, которым я должен это сделать, помимо использования текстового редактора для этого? Кроме того, я публикую, как моя программа работает ниже. – user2264570

0

уступи идти:

<?php 

$database_answer = "Ω and β"; // <-- $grap correct answer from from mysql 
$user_answer = "Ω and β"; // <-- make $user_answer the correct answer 
// display hex representation of both strings 
printf("%s<br>%s", bin2hex($database_answer), bin2hex($user_answer)); 

?> 
  • извлечения $ database_answer из базы данных (MySQL?) Правильных ответов

Приведенный выше код должен отображать точно такой же шестигранного строку, если Нет, у вас проблемы с кодировкой. Вы можете начать с обеспечения того, чтобы набор символов для вашей базы данных был установлен в UTF-8.

+0

Yup, это база данных MySQL. Я пробовал это и действительно, шестнадцатеричные строки не совпадают. Я получил ceb26574617a6f6964 из базы данных и 26626574613b6574617a6f6964 из выбранного ответа, даже если они выглядят одинаковыми при выборе. Я заглянул в базу данных, и я вижу в разделе «Collation» список таблиц, который имеет «latin1_swedish_ci» для каждой таблицы. Будет ли это то, что нужно изменить, или установка будет в другом месте? В «информационной схеме» под «character_sets»: Я предполагаю, что это именно то, что база данных может поддерживать? Кроме того, если я исправлю db, должен ли я модифицировать код каким-либо образом? – user2264570

+0

ceb26574617a6f6964 правильный UTF-8. Если ваша база данных производит это, тогда проблем нет. Установлена ​​ли ваша HTML-страница в UTF-8? ChaseTheSun

+0

также:

ChaseTheSun

0

, если база данных предназначена как так:

QuestionNumber | Answer 
------------------------------- 
1    |  3 
2    |  1 
3    |  4 
4    |  2 
5    |  4 

ваш HTML:

<select name="question1"> 
    <option value="1">α</option> 
    <option value="2">β</option> 
    <option value="3">γ</option> 
    <option value="4">Ω</option> 
</select> 

Таким образом, только число '4' отправляется на сервер, в отличие от ответа " Ω». Тогда вам придется сравнивать числа.

+0

Спасибо! Это помогло мне подумать о том, как сделать сравнение не зависящим от контента, а это то, что мы действительно собираемся в любом случае, поэтому кодировка символов - это не проблема. В конце концов, я хочу обратиться к нему, поскольку я уверен, что он помогает всему, что будет на месте (особенно, если мы выпустим наш код, и он нуждается в интернационализации и т. Д.), Но на данный момент у нас есть необходимые нам функции. Большое вам спасибо за вашу помощь во всем. Я определенно многому научился в наших дискуссиях! Я бы проголосовал за ваш ответ, но я новичок, поэтому я еще не могу, но опять же, спасибо! – user2264570

+0

Я так рад, что он работает на вас, все лучшее с вашим проектом! – ChaseTheSun

Смежные вопросы