0

データベースにデータを挿入する次のコードがあります。

$query = "INSERT INTO `questions`(`title`,`content`,`set`,`date`) VALUES(:title,:content,:set,:date)";
    $stmt = $db -> prepare($query);
    $stmt -> bindParam(':title',$title,PDO::PARAM_STR);
    $stmt -> bindParam(':content',$content,PDO::PARAM_STR);
    $stmt -> bindParam(':set',$set,PDO::PARAM_INT);
    $stmt -> bindParam('date',$date,PDO::PARAM_STR);
    $stmt -> execute();
    echo '<script>alert("שאלה נוספה בהצלחה");</script>';

問題は、DB に挿入された情報を表示するたびに、次のような奇妙な文字列に変わる&#1489;&#1506;&#1489;&#1512;&#1497;&#1514; ことです。

PS 英語の文字列を入れれば大丈夫です。DB では適切な英語として表示されます。自分の言語にデータを挿入すると発生します。

4

4 に答える 4

-1

バインドから PDO::PARAM_STR を削除し、これをコードで一度使用します。

mb_internal_encoding("UTF-8"); //for utf unicodes
internal_encoding("your unicode"); //

また

default_charset = "your unicode";
于 2013-10-23T19:20:41.357 に答える
-1

しばらく調べてみると、何が問題なのかがわかりました。

入力を取得したフォームは、HTML タグ内にありませんでした。これは、迅速で非常にシンプルなインターフェイスだったからです。

それを考えた後、適切な HTML タグ内でフォームを実行しようとしました。私はこれで<form>タグを囲みました:

    <html dir="rtl">
    <head>
    <title>Insert a new question</title>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> // important line
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  </head>
 <body>
<!-- form here -->
</body>
</html

それを行った後、与えられた入力は HTML エンティティ コードではなく適切なヘブライ文字でした。

これが誰かを助けることを願っています。

于 2013-10-24T13:16:15.230 に答える
-2

DB に挿入された情報を表示するたびに、次のような奇妙な文字列に変わります&#1489;&#1506;&#1489;&#1512;&#1497;&#1514;

私は持っている。
これらの記号は、データベースとはまったく関係ありません。
これはHTML エンコーディングであり、mysql はこの方法でデータをエンコードすることはありません。

DBに追加する前にデータを変換する他のソフトウェアです。これらの文字を出力するだけで簡単に確認できます (もちろん、ブラウザによってレンダリングされません)。ほとんどの場合、何らかの「完全サニタイズ」機能を確実に取り除く必要があります。

于 2013-10-24T05:22:37.893 に答える