1

-- システムは MySQL、PHP、Apache であり、コードは Codeigniter フレームワークを中心に構築されています。

明確にするために編集:データを保存していません。数年前に保存されたデータを取得しようとしています(エスケープされたデータとしてひどく)。データベースでは、Fred' という名前は Fred' として保存されていますが、htmlspecialcahrs を使用して Fred' を変換すると、Fred' として出力されます。私の質問は、Fred を Fred' やその他の同等のものに変換するにはどうすればよいですか?

元の質問

別のシステム (正確には Invision Power Board) からデータベースを継承しました。このサイトは現在、Codeigniter を使用してカスタム コード化されていますが、古い Invision Power Board サイトと同じメンバー データベースを使用しています。

ユーザーの名前にアポストロフィが含まれている場合、たとえば "Fred'" codeigniter の組み込み html_escape 関数 (htmlspecialchars のみを使用) がそれを Fred に変換するという問題を発見しました'

しかし、データベースには名前が Fred' として保存されているため、ルックアップは失敗します。

Invision Power Board が文字列をデータベースに挿入する前に何をしていたかはわかりませんが、 ' ではなく ' に確実に変換する方法を知っている人はいますか?

ユーザー名には何百もの可能性があるため、単に str_replace を実行したり、データベース内のデータを変更したりするだけでは役に立ちません。名前に # が含まれるユーザー (おそらく特殊文字) をすばやく検索すると、このバグが原因でサイトに現在ログインできない 440 人のユーザーが表示されます。

編集:「;」を削除するためにいくつかのフォーマットを修正しました アポストロフィを表示するだけではありません

4

1 に答える 1

0

preg_replace() を使用して、比較前に PHP で生成された文字列から 0 を削除できます。

$string = 'Fred&#039';

$string = preg_replace('/&#0+([1-9]+)/', '&#$1', $string);

var_dump(str_split($string));
// str_split to show real result
于 2012-10-19T16:15:27.027 に答える