在我的页面中,我将低级字符串转换为大写字符串,并在标题标记中输出“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:这是我上面的代码导致的结果:
如果我只使用strtoupper
:
答案 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()
。