0

试图弄清楚这个解码。我想以最通用的文本结束。省略 '...' 单引号或双引号的花式引号,常规旧的 '-' 而不是 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
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 实体之类…的只是一个技巧,它允许浏览器显示不属于文档编码的字符。它们与数据库无关!如果您将它们放入数据库,可能是因为您的应用程序没有使用 UTF-8(UTF-8 允许表示任何字符),但用户无论如何都在输入这些字符,并且浏览器会尽力将它们放入文档中。最简单的修复方法是切换到 UTF-8,正如UTF-8 一直到.

Fb 不喜欢这些 字符,我认为也不喜欢省略号字符

HTML 实体是 HTML,而不是纯文本。如果 Facebook 需要纯文本,则 HTML 实体将按原样显示,而不是被解码。至于«...»,我真的怀疑 Facebook(使用 UTF-8)是否会特别对待它们。您可能以错误的编码发送它们。

于 2013-02-28T17:42:09.280 回答