试图弄清楚这种解码。我想结束最通用的文本。 Elipsis to'...'花哨引用单引号或双引号,常规旧' - '不是emdash。除了str_replace之外还有另外一种方式,包括花式表与常规字符串吗?
$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
答案 0 :(得分: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实体只是允许浏览器显示不属于文档编码的字符的技巧。它们与数据库无关!如果你将它们带入你的数据库,可能是因为你的应用程序没有使用UTF-8(UTF-8允许代表任何字符),但用户正在输入这些字符,浏览器也是最好的使它们适合文档。最简单的方法是将其切换为UTF-8,如UTF-8 all the way through中所述。
Fb不喜欢这些&#字符,我认为不喜欢elipsis字符
HTML实体是HTML,而不是纯文本。如果Facebook期望纯文本,HTML实体将按原样显示而不是被解码。关于«...»,我真的怀疑Facebook(使用UTF-8)对他们有特殊的待遇。你可能用错误的编码发送它们。