2013-02-28 95 views
0

试图找出解码。我想结束最通用的文本。 Elipsis to'...'花式引用单引号或双引号,常规旧' - '不是emdash。除了str_replace之外,还有另外一种方式来创建一个花式表与常规字符串表吗?html_entity_decode为纯文本或不是utf(elipsis为...等)

$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

请参阅['strtr()'函数](http://www.php.net/manual/en/function.strtr.php) – SDC 2013-02-28 17:16:29

回答

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的犯规像这些&#字符,我将承担犯规像省略号字符或者

HTML实体,那么,HTML,而不是纯文本。如果Facebook期望纯文本,HTML实体将按原样显示而不是被解码。随着对«…»,我真的怀疑,Facebook的(这是使用UTF-8)对待他们分外。你可能会用错误的编码发送它们。

+0

这对于几个测试用例来说看起来不错。我是从一个用户的形式,投入WP DB获取字符串(我认为这是它被编码为…点),我发送字符串至Facebook,通过FB图。 Fb不喜欢这些&#字符,我会假设不喜欢elipsis字符。这就是为什么我想把它翻译成ascii,尽可能最基本。你能举出你所遇到的意外结果的例子吗? – 2013-02-28 23:46:07

+0

@DougCassidy - 查看我更新的答案。 – 2013-03-01 08:14:50

+0

非常感谢所有的好消息! – 2013-03-01 15:50:27