PHP转换适用于标题标记的字符

时间:2014-03-10 14:36:22

标签: php html title html-entities entities

在我的页面中,我将低级字符串转换为大写字符串,并在标题标记中输出“em”。首先,我遇到了 未被接受的问题,因此我必须保留实体。

所以我将它们转换为unicode,然后转换为大写,然后转换回htmlentities

echo htmlentities(strtoupper(html_entity_decode(ob_get_clean())));

现在我遇到了一个与“正确的单引号”相关的问题。我在标题中将此字符设为’

似乎我正在使用的两个函数中的任何一个都没有正确转换它们。有没有更好的功能,我可以使用或有什么特别的标题标签?

编辑:以下是原始数据的var_dump,我对此没有影响:

string(74) "Example example example » John Doe- Who’s That? "

编辑II:这是我上面的代码导致的结果:

enter image description here

如果我只使用strtoupper

,就会发生这种情况

enter image description here

2 个答案:

答案 0 :(得分:0)

您的问题是strtoupper会破坏您的UTF-8实体解码输入,因为它不是多字节识别的。在这种情况下,’解码为十六进制编码的UTF-8序列e2 80 99。但在strtoupper的单字节世界中,代码为\xe2的字符为â,转换为Â\xc2) - 这使得您的文本是无效的UTF-8序列。

只需改为使用mb_strtoupper

答案 1 :(得分:0)

这很难看,但它可能适合你(虽然我肯定会建议Jon的解决方案):

strtoupper()之后,您可以通过以下方式替换所有大写的HTML实体:

$entity_table = get_html_translation_table(HTML_ENTITIES);
$entity_table_uc = array_map('strtoupper', $entity_table);
$string = str_replace($entity_table_uc, $entity_table, $string);

这样就不需要htmlentities() / html_entity_decode()