2013-02-14 132 views
0

当我从代码中的Word新闻文章中抓取标题并将它们作为电子邮件传递时,标点符号有点受到损坏。PHP字符编码问题

例如"TAMAGOTCHI P’S LOVE & MELODY SET"作为"TAMAGOTCHI P’S LOVE & MELODY SET"出现。

任何想法如何防止这种情况?

让我知道你是否需要查看我目前使用的特定代码。 (我真的不知道,如果这是一个WordPress的问题,或者PHP的问题。

编辑 什么情况是,这个称号是通过查询字符串传递给一个形式。然后,当表单提交,我从表单字段中的字符串并通过电子邮件发送。

所以我想我需要的HTML或者解码之前,我将它传递到表单字段,要不然之前我发电子邮件。

EDIT 2 奇怪,所以我仔细看了一下代码,我已经在做一个urldecode,然后我将值传入第E型场

jQuery('#product_name').val("<?php echo urldecode(strip_tags($_GET['pname'])); ?> 

有一些默认的编码时序列化(阿贾克斯formhandler)发生

var dataString = $(this).serialize(); 

编辑3 OK原来的代码是比较复杂的。标题也会在它打到表单之前传递给某种类型的wordpress会话。我会弄清楚我需要将urldecode放在哪里。谢谢!

+1

它没有损坏。这是HTML编码的报价。您可以检查每个阶段以查看编码发生的位置。当它出来的数据库,当WP交给电子邮件等... – 2013-02-14 16:48:44

+0

我想要un-html编码它(html解码?)。我会在PHP中搜索如何做到这一点,但请告诉我,如果这是你可能能够分享的东西! – 2013-02-14 16:52:58

+1

试试http://www.php.net/manual/en/function.html-entity-decode.php – 2013-02-14 16:55:56

回答

1

这是一个WordPress的“功能”,我可以没有。

这里有一个下正肮脏的方法来获取更换花哨的报价(或其他实体):

我们可以整合更深,挂接到the_title,如果你想这同去实体功能整个网站。此代码块将属于您的主题的functions.php文件。

function reform_title($title, $id) { 
    $title = str_replace('&#8217', "'", $title); 
    return $title; 
} 
add_filter('the_title', 'reform_title', 10, 2); 
+1

啊,会讨厌为每个可能的字形做这个。这会工作吗? mb_convert_encoding($ string,“UTF-8”,“HTML-ENTITIES”); – 2013-02-14 16:55:02

+0

@MaxHodges这会让你更接近:'$ title = html_entity_decode($ title,ENT_QUOTES);'但我认为它并不涉及所有实体。 – 2013-02-14 17:04:03

+0

发布了另一个编辑(编辑2)以提问。仍然不明白发生了什么,但可能会接近... – 2013-02-14 17:08:44

0

林真的不知道关于WordPress,但问题本身它,它出来作为URLEncode的,而不是一个UTF-8或其他编码的文本。

你有两个选择

  1. 当您收到的文字,你永远不会把它恢复正常编码(当你访问$ _GET或$ _POST变量,这是奇怪的,通常是由PHP DE-编码)

  2. 您正在使用urlencode()函数解析消息。

+0

请参阅编辑问题! – 2013-02-14 17:00:55