html_entity_decode为纯文本或不是utf(省略号为...等)

时间:2013-02-28 17:14:40

标签: php html-entities

试图弄清楚这种解码。我想结束最通用的文本。 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

1 个答案:

答案 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)对他们有特殊的待遇。你可能用错误的编码发送它们。