2

私は、ユーザーが複数の異なる基準で検索されるアプリケーションに取り組んでいます。利用可能な基準の1つは、名前による検索です。名前は、HTML文字が削除された状態でデータベースに保存されます。a'はとして保存され'ます。これに伴う問題は、ユーザーが通常の英語名を入力して名前で検索すると、データベースでHTMLが削除された名前ではなく、英語の名前が検索されることです。htmlspecialcharsを使用してみ($string, ENT_QUOTES)ましたが、何らかの理由で一重引用符が正しく置き換えられるとは限りません。誰かがこれが起こる理由を考えることができますか、またはより良い方法をお勧めしますか?ありがとうございました!

4

4 に答える 4

3

一重引用符を置き換える必要はありません。あなたがする必要があるのは、PDOまたはMySQLi拡張機能のいずれかを使用することです。PDOの例、

$stmt = $pdo->prepare('SELECT * FROM tableName WHERE name = :name');

$stmt->execute(array(':name' => $name));
foreach ($stmt as $row) 
{
    // do something with $row
}

このようにして、値に一重引用符が含まれている場合でも検索できます。

于 2012-09-21T16:40:37.400 に答える
1

html_entity_decode($string)代わりにこれを使用してみてくださいhtmlspecialchars($string, ENT_QUOTES);

于 2012-09-21T16:40:12.083 に答える
0

どちらも良いですが、これを試すこともできます...

 function change_text($in, $out, $text){

$input = array($in);
$change = array($out) ;
$result = @str_replace ($input ,$change, $text);
return $result;
}

$change_text = change_text("'", '',$text);

それが役立つことを願っています

于 2012-09-21T16:45:44.407 に答える
0

クエリで、'(引用符)を''に置き換えます。最初の引用は、この引用の後のキャラクターがそのまま使用されることに署名します。

以下のサンプルコード:

mysql> select * from activities where activity='aku''kamu';
+----+----------+---------+
| id | activity | user_id |
+----+----------+---------+
|  1 | aku'kamu |       3 |
+----+----------+---------+
1 row in set (0.00 sec)

mysql> update activities set activity='aku''kamu' where id=2
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from activities where activity='aku''kamu';
+----+----------+---------+
| id | activity | user_id |
+----+----------+---------+
|  1 | aku'kamu |       3 |
|  2 | aku'kamu |       3 |
+----+----------+---------+
2 rows in set (0.00 sec)

mysql>
于 2012-09-21T16:52:04.660 に答える