我正在使用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
}
所以再一次,它适用于常规字符串,但不适用于特殊字符。我能做些什么来成功匹配这些角色吗?其中一个用例是化学课,他们肯定需要能够添加特殊字符,如欧米茄和贝塔等。我感谢任何人都可以给予的任何帮助。
更新
由于发布整个游戏代码的时间非常长,所以每个人都可以参考,一般过程是这样的:一个简单的HTML表单将问题提交给MySQL数据库。使用TinyMCE的自定义版本插入特殊字符,仅允许格式化粗体,下划线,斜体和特殊字符。它在数据库中的显示方式的一个例子是:
β is the right answer
因此,一旦数据在数据库中,游戏代码就会选择一个随机问题,并显示一个正确答案,四个错误。如果所选答案与数据库答案匹配,则会给出一个点。游戏通过jQuery mobile变得触摸友好,但这是关于代码的唯一特殊之处。其余的只是在TextWrangler中编写的通用PHP / JS手。
答案 0 :(得分: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";
}
?>
得到了这个:
你是对的!
我错过了什么吗?
答案 1 :(得分: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));
?>
上面的代码应该显示完全相同的十六进制字符串,如果没有,你在某处有编码问题。您可以首先确保数据库的字符集设置为UTF-8。
答案 2 :(得分: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'被发送到服务器,而不是答案'Ω'。然后你只需要比较数字。