dongyan1993 2018-02-05 09:45
浏览 38
已采纳

如何在PHP中将字符串转换为小型大写字母?

I am trying to convert a strint composed of "standard" upper and lower case letters to small capitals, in PHP. There is no information about small caps in the php.net docs.

Small capitals are, in my understanding, this thing :

Hᴇʟʟᴏ ᴛʜᴇʀᴇ

(generated with this site : https://fsymbols.com/generators/smallcaps/)

For instance, here is the small cap version of a t : http://www.fileformat.info/info/unicode/char/1d1b/index.htm

I searched the web for a longtime and found nothin in PHP. I know that CSS let you do that by using

font-variant: small-caps;

But I need to do this on the server side for what I do. Is this possible in PHP ?

EDIT: To complete my question, I am trying to generate plain text. So no HTML, images or CSS is possible in my case.

EDIT 2: On the website linked, a Javascript function is used to convert the text

Here is the code :

function encool() {
    var _0xce74x20 = location[_0x804c[82]],
        _0xce74x21;
    if (_0xce74x20[_0x804c[84]](_0x804c[83]) == -1 && _0xce74x20[_0x804c[84]](_0x804c[85]) == -1 && _0xce74x20[_0x804c[84]](_0x804c[86]) == -1 && _0xce74x20[_0x804c[84]](_0x804c[87]) == -1 && _0xce74x20[_0x804c[84]](_0x804c[88]) == -1) {
        _0xce74x21 = document[_0x804c[91]][_0x804c[90]][_0x804c[89]]
    } else {
        _0xce74x21 = change(decomposeAString(document[_0x804c[91]][_0x804c[90]][_0x804c[89]]))
    };
    document[_0x804c[91]][_0x804c[92]][_0x804c[89]] = _0xce74x21
}

Pretty sure he is using a character mapping. I will look into that and post the solution if I find it.

  • 写回答

3条回答 默认 最新

  • dongshang4984 2018-02-05 10:26
    关注

    Ok here is the solution I came up with, but it is not very complete because even if it fits my needs. I needed this to convert small text (category names) so it is ok for me.

    function convertToSmallCaps($string) {
        // standar capitals
        $caps = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
        // small capitals
        $smallCaps = array('ᴀ', 'ʙ', 'ᴄ', 'ᴅ', 'ᴇ', 'ꜰ', 'ɢ', 'ʜ', 'ɪ', 'ᴊ', 'ᴋ', 'ʟ', 'ᴍ', 'ɴ', 'ᴏ', 'ᴘ', 'ǫ', 'ʀ', 's', 'ᴛ', 'ᴜ', 'ᴠ', 'ᴡ', 'x', 'ʏ', 'ᴢ');
    
        // remove all chars except [a-z] and - (replacing dashes with spaces)
        $sanitized_string = str_replace('-',' ',sanitize_title($string));
    
        // convert to uppercase
        $sanitized_string = mb_strtoupper($string);
    
        $length = strlen($sanitized_string);
        $output_string='';
        for($i = 0; $i<$length; $i++){
            $char = $sanitized_string[$i];
            // If the letter exsist in small capitals
            $letter_position = array_search($char,$caps);
            if(is_numeric($letter_position) && isset($smallCaps[$letter_position])) {
                // We append it to the ouput string
                $output_string.=$smallCaps[$letter_position];
    
            } else {
                // or else we append the original char to the output string
                $output_string.=$char;
            }
        }
        // return the converted string
        return $output_string;
    }
    

    It basically maps all chars in the string from caps to small caps

    Problems :

    1. it is wordpress dependent. I used the sanitize_title function from wordpress, which "slugifies" the string (removing all chars except [a-z] and -)
    2. If your text has a lot of diacritics or is a composed of numbers and non latin chars, or longer than a category name, the result may be a bit weird
    3. some of the letters (the x or s or q) are not actual small caps (because they don't exist, I guess ?) so the result can be confusing on some display.

    I will try to improve this in the future if my need change

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 ATAC测序到底用什么peak文件做Diffbind差异分析
  • ¥15 安装ubantu过程中第一个vfat 文件挂载失败
  • ¥20 GZ::CTF如何兼容一些靶机?
  • ¥15 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位
  • ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致
  • ¥15 QFILHelper怎么恢复全字库,提示进程已完成,只能恢复分区文件
  • ¥150 求 《小魔指》街机游戏机整合模拟软件
  • ¥20 你好,我想问下easyExcel下拉多选,或者复选框可以实现吗
  • ¥20 双非跨考工科哪个专业和方向就业前景好?