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 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler