0

Trying to figure out this decoding. I want to wind up with the most generic text possible. Elipsis to '...' Fancy quotes to single or double quotes, regular old '-' not the emdash. Is there another way other than str_replace with a table of fancy vs. regular strings?

$str = 'Hey,…I came back….ummm,…OK,…cool';

echo htmlspecialchars_decode($str, ENT_QUOTES) ;
// Hey,…I came back….ummm,…OK,…cool

echo html_entity_decode($str, ENT_QUOTES, 'ISO-8859-15')  ;
// Hey,…I came back….ummm,…OK,…cool

echo html_entity_decode($str, ENT_QUOTES, 'UTF-8')  ;
//this works, but changes to the elipse character 
// Hey,…I came back….ummm,…OK,…cool

echo str_replace("…", "...", $str)  ;
//Hey,...I came back....ummm,...OK,...cool
//desired result
4

1 に答える 1

2

あなたのスペックはわかりませんが、次のようなものが欲しいという印象があります。

$str = 'Hey,…I came back….ummm,…OK,…cool';
echo iconv('UTF-8', 'ASCII//TRANSLIT', html_entity_decode($str, ENT_QUOTES, 'UTF-8'));

これにより、基本的にすべてのUnicode文字が7ビットASCIIに適合します。予期しない結果が生じる可能性があります。

更新:予期しない結果の例:

$str = 'Álvaro España €£¥¢©®';
echo iconv('UTF-8', 'ASCII//TRANSLIT', html_entity_decode($str, ENT_QUOTES, 'UTF-8'));
# 'Alvaro Espa~na EURlbyenc(c)(R)

$str = 'Test: உதாரண';
echo iconv('UTF-8', 'ASCII//TRANSLIT', html_entity_decode($str, ENT_QUOTES, 'UTF-8'));
# Notice: iconv(): Detected an illegal character in input string

$str = 'Test: உதாரண End Test';
echo iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', html_entity_decode($str, ENT_QUOTES, 'UTF-8'));
# Test:  End Test

…のようなHTMLエンティティは、ブラウザがドキュメントエンコーディングに属していない文字を表示できるようにするための単なるトリックであることに注意してください。彼らはデータベースとは何の関係もありません!それらをDBに取り込む場合は、アプリがUTF-8を使用していないことが原因である可能性があります(UTF-8では任意の文字を表すことができます)が、ユーザーはとにかくそれらの文字を入力しており、ブラウザーはそれらをドキュメントに合わせるために最善を尽くします。UTF-8で説明されているように、 UTF -8に切り替えるだけで最も簡単に修正できます。

Fbはこれらの&#文字が好きではなく、エリプシス文字も好きではないと思います

HTMLエンティティは、プレーンテキストではなくHTMLです。Facebookがプレーンテキストを期待している場合、HTMLエンティティはデコードされるのではなくそのまま表示されます。«…»については、Facebook(UTF-8を使用している)がそれらを例外的に扱っていることを本当に疑っています。おそらく間違ったエンコーディングでそれらを送信しています。

于 2013-02-28T17:42:09.280 に答える