1

我在使用 PHP 编写的应用程序时遇到了困难。该应用程序的目的是一个支持触摸屏的开源学习游戏(使用 jQuery mobile)。游戏运行良好,使用 strcasecmp() 将数据库中的条目与所选答案进行比较(用户从不自己输入数据,他们只从选项中进行选择,因此不存在输入清理问题,因为选项直接来自数据库)。但是,当我添加包含特殊字符(例如 Ω 和 β)的功能时,strcasecmp() 不再起作用。自然地,我假设该函数无法比较这些符号。经过深入研究,我尝试了 preg_match 和 mb_ereg_match,虽然它们在常规问题上工作得很好,但同样,它们不能正确地将问题与其中的特殊字符匹配。马上,

$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
}

同样,它适用于常规字符串,但不适用于特殊字符。我能做些什么来成功匹配这些字符吗?其中一个用例是化学课,他们肯定需要能够添加特殊字符,例如 omega 和 beta 等。我感谢任何人可能提供的任何帮助。

更新:

由于发布整个游戏代码会非常长,供大家参考,大致流程是这样的:一个简单的HTML表单向MySQL数据库提交问题。特殊字符是使用自定义版本的 TinyMCE 插入的,该版本只允许设置粗体、下划线、斜体和特殊字符的格式。它在数据库中的外观示例如下:

β is the right answer

因此,一旦数据进入数据库,游戏代码就会随机选择一个问题,并给出一个正确答案和四个错误答案。如果所选答案与数据库答案匹配,则给予一分。该游戏通过 jQuery mobile 进行了触摸友好,但这是代码的唯一特殊之处。其余的只是用 TextWrangler 手写的通用 PHP/JS。

4

3 回答 3

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";
}

?>

得到了这个:

你是对的!

我错过了什么吗?

于 2013-04-10T06:39:34.267 回答
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));

?>
  • 从您的数据库(mysql?)中检索正确答案的 $database_answer

上面的代码应该显示完全相同的十六进制字符串,如果不是,你在某处有编码问题。您可以首先确保将数据库的字符集设置为 UTF-8。

于 2013-04-11T04:12:27.867 回答
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”被发送到服务器,而不是答案“Ω”。然后你只需要比较数字。

于 2013-04-12T00:01:48.160 回答