utf8-UTF8出力の問題LaravelPHP
私とキャラクターとエンコーディングはこれまでうまくいきませんでした。私が苦労している問題を誰かが助けてくれるのではないかと思います。ほとんどの場合、エンコーディング101の問題である可能性がありますが、ドキュメントやフォーラムなどを精査しましたが、解決策を見つけることができません。
私の環境:
XAMMP(Windows)上のLaravel 5.5
私のデータベースには次のような名前があります: "D \ xc3 \ xacaz de la Pe \ xc3 \ xb1a"
「DíazdelaPeña」として出力するものと出力するもの
UT8チャートによると、これらの文字は正しいです。 http://www.utf8-chartable.de/unicode-utf8-table.pl?start=128&number=128&names=-&utf8=string-literal
その形式でデータベースに保存する際に間違いがありましたか?それらは他の方法でエンコードされるべきでしたか?
それとも、正しく出力されていないのでしょうか。 utf8_encodeとutf8_decodeを試しましたが、これまでに得られたと思われる出力は、同じ「D \ xc3 \ xacaz de la Pe \ xc3\xb1a」のみです。
ありがとう
答え :
解決策:
preg_replace_callback()
を使用して\xXX
を置き換えることができます hexdec()
およびchr()
を使用した値:
$str = 'D\xc3\xacaz de la Pe\xc3\xb1a' ;
$str = preg_replace_callback('~\\\\x([a-f0-9]{2})~', function($match) {
return chr(hexdec($match[1]));
}, $str);
echo $str ;
出力:
"Dìaz de la Peña"
上記のコードは、 \x
の後に2つの16進文字が続くものと一致するすべての文字列を取ります。次に、 hexdec()
を使用して10進値に変換し、最後に chr()
を使用して文字に変換します。
[a-f0-9]
を[[:xdigit:]]
に置き換えることもできます:
'〜\\\ \x([[:xdigit:]] {2})〜'
これが試合のデモです。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。