PHP中的特殊字符(如omega和beta)字符串匹配

时间:2013-04-10 05:31:16

标签: php javascript regex jquery-mobile special-characters

我正在使用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手。

3 个答案:

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

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

上面的代码应该显示完全相同的十六进制字符串,如果没有,你在某处有编码问题。您可以首先确保数据库的字符集设置为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'被发送到服务器,而不是答案'Ω'。然后你只需要比较数字。