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

Special character (like omega and beta) string matching in PHP

本文关键字:beta 字符 字符串 串匹配 omega 特殊字符 PHP      更新时间:2023-09-26

我使用PHP编写的应用程序有困难。该应用程序的目的是一个支持触摸屏的开源学习游戏(使用jQuery移动)。游戏使用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手机制作的,但这是代码的唯一特别之处。其余的只是用TextWrangler手工编写的通用PHP/JS。

我试过了:

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

得到了这个

你是对的!

我错过了什么吗?

试一试:

<?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。

如果您的数据库是这样设计的:

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'被发送到服务器,而不是答案'Ω'。那么你只需要比较数字。