mb_strtoupper无法识别引号

时间:2018-07-11 17:24:38

标签: php text character-encoding

我遇到mb_strtoupper的问题。我需要用它来大写用PHP生成的新闻通讯中的文本(所以我不能只用CSS来大写它,而使用将大写的PHP函数卡住了)

事实是,mb_strtoupper可以正常工作,但是引号'字符有问题。诸如Bob's Burgers之类的文本将被转换为BOB’S BURGERS

有没有办法使mb_strtoupper不用引号?

2 个答案:

答案 0 :(得分:1)

那是因为您的文字不是Activity B而是Bob's Burgers。换句话说,您没有纯文本,但是HTML和Bob’s Burgers函数没有内置的HTML解析器。

这真的很棘手,因为HTML是一种成熟的语言。如果您不希望使用HTML标签(例如mb_…),可以尝试执行以下操作:

Click <a href="//example.com">here</a>
$data = 'Bob&rsquo;s Burgers';
// 1. Convert to plain text
$data = mb_convert_encoding($data, 'UTF-8', 'HTML-ENTITIES');
// 2. Upper case
$data = mb_strtoupper($data, 'UTF-8');
// 3. Encode back to 7-bit ASCII
$data = mb_convert_encoding($data, 'HTML-ENTITIES', 'UTF-8');
var_dump($data);

Online demo

步骤3应该不是真正必要的,但我猜您出于某些原因拥有HTML实体:-?

答案 1 :(得分:0)

像这样将编码设置为mb_strtoupper中的第二个参数...

mb_strtoupper("Bob's Burgers", 'UTF-8');

此处有更多信息:http://php.net/manual/en/function.mb-strtoupper.php