标签: mbstring

用问号替换无效的UTF-8字符,mbstring.substitute_character似乎被忽略了

我想用引号替换无效的UTF-8字符(PHP 5.3.5).

到目前为止,我有这个解决方案,但删除了无效字符,而不是被'?'取代.

function replace_invalid_utf8($str)
{
  return mb_convert_encoding($str, 'UTF-8', 'UTF-8');
}

echo mb_substitute_character()."\n";

echo replace_invalid_utf8('éééaaaàààeeé')."\n";
echo replace_invalid_utf8('eeeaaaaaaeeé')."\n";
Run Code Online (Sandbox Code Playgroud)

应输出:

63 // ASCII code for '?' character
???aaa???eé // or ??aa??eé
eeeaaaaaaeeé
Run Code Online (Sandbox Code Playgroud)

但目前产出:

63
aaaee // removed invalid characters
eeeaaaaaaeeé
Run Code Online (Sandbox Code Playgroud)

有什么建议?

你会用另一种方式(preg_replace()例如使用?)

谢谢.

php utf-8 character-encoding mbstring

5
推荐指数
1
解决办法
2万
查看次数

mb_convert_encoding()不使用phpunit

出于某种原因,mb_convert_encoding在phpunit中运行时,我得到了意想不到的结果.例如,执行以下操作:

var_dump( mb_convert_encoding( utf8_decode( 'ö' ), 'UTF-8' ) === 'ö' )

上面的返回bool (true)在PHP-FPM和PHP-CLI下,但是在PHPunit下返回false,mb_convert_encoding()正在做某事,它只是编码为乱搞的字符串.

php phpunit mbstring

5
推荐指数
1
解决办法
1978
查看次数

mbstring.strict_detection有什么作用?

mbstring PHP模块有一个strict_detection设置,在此处记录.不幸的是,手册完全没用; 它只说这个选项"启用严格的编码检测".

我做了一些测试,无法找到任何mbstring函数如何受此影响.mb_check_encoding()mb_detect_encoding()为有效和无效的UTF-8输入提供完全相同的结果.

(编辑:)该mbstring.strict_detection选项是在PHP 5.1.2中添加的.

php configuration mbstring

5
推荐指数
1
解决办法
815
查看次数

处理多字节子字符串时,json_encode返回false

我使用几乎最新版本的PHP(5.5.11),这是问题所在.当我使用json_encode字符串的一部分时,它返回false.在我开始使用的时候substr,但后来我意识到在处理非英语字符串时这是完全错误的.但即使在我使用后,mb_substr我仍然看到json_encode回报false:

$s = "????????????????????J??????????????????????????????????????";
$a = mb_substr($s, 0, 10);
Run Code Online (Sandbox Code Playgroud)

正如你看到的,

var_dump( json_encode([
    'd' => $a
]) );
Run Code Online (Sandbox Code Playgroud)

回归false,和

var_dump( json_encode([
    'd' => $s
]) );
Run Code Online (Sandbox Code Playgroud)

返回正确的json.

在研究json_last_error时,我发现这是由于Malformed UTF-8 characters, possibly incorrectly encoded.所以问题是mb_substr给了我畸形的字符.

当我var_dump($a);看到它看到它产生string(10) "????"(我假设每个日语字符是3个字节,并且该问号是格式错误的字符).

那么如何以这种方式从字符串中获取子字符串,以至于我不会得到格式错误的字符串?

php arrays json function mbstring

5
推荐指数
1
解决办法
3528
查看次数

Ubuntu 16.04缺少mbstring扩展名

我想从不受支持的ubuntu 12.10版本迁移我的Web服务器.我安装了16.04并安装了apache2,php7,mysql和phpmyadmin.

当我想使用phpmyadmin我有错误,mbstring丢失.

在PHP.ini文件中,只能为Windows启用此扩展.

当我安装mbstring包时,当我重新加载phpmyadmin页面时,我得到空白页面没有任何错误.

我安装了以下包:

apache2, php, libapache2-mod-php, php-mysql, php-mbstring, php7.0-mbstring, mysql-server, phpmyadmin
Run Code Online (Sandbox Code Playgroud)

当我卸载mbstring包时,在phpmyadmin重载后我看到mbstring扩展错误...

该怎么办?我花了两天时间来解决这个问题,但都没有成功......谢谢

php mysql ubuntu phpmyadmin mbstring

5
推荐指数
1
解决办法
2万
查看次数

如何确定字符所需的最小字节数?

有没有办法确定特定编码中字符所需的最小字节数?像mbstring扩展支持的编码之一.UTF-8的值为1,UTF-16的值为2等.

我不想获得特定字符串或字符的长度.

我想知道给定编码支持的最小字符大小,根据它的规范.

我目前使用此代码:

<?php

function flawed_detection($encoding)
{
    // I use 'a' in the hope that this char need the least number of bytes in all the supported encodings
    return strlen(mb_convert_encoding('a', $encoding, 'UTF-8'));
}

foreach (mb_list_encodings() as $encoding) {
    echo "$encoding: ", flawed_detection($encoding), "\n";
}
Run Code Online (Sandbox Code Playgroud)

部分输出:

...
UTF-16LE: 2
UTF-8: 1
UTF-7: 1
UTF7-IMAP: 1
ASCII: 1
EUC-JP: 1
...
Run Code Online (Sandbox Code Playgroud)

但我不确定要使用的"正确"字符.如果有的话.

编辑:我已经在每个编码中测试了从0到U + 10FFFF的每个字符的暴力方法,结果与我的finally_not_so_flawed_detection函数(使用'a'char或空格)完全相同:p

php unicode encoding character-encoding mbstring

5
推荐指数
1
解决办法
112
查看次数

PHP 7.2 dom,mbstring和simplexml

我在服务器上安装了php 7.2,除了这3个问题外,其他一切都正常。

我面临以下问题:

未加载PHP扩展名dom。请与您的服务器管理员联系或访问http://php.net/manual/en/dom.installation.php 进行安装。

未加载PHP扩展名mbstring。请与您的服务器管理员联系,或访问 http://php.net/manual/en/mbstring.installation.php进行安装。

未加载PHP扩展simplexml。请与您的服务器管理员联系,或访问 http://php.net/manual/en/simplexml.installation.php进行安装。

...现在当我输入php -m时

[root@localhost php.d]# php -m
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
exif
fileinfo
filter
ftp
gd
gettext
hash
iconv
json
ldap
libxml
mcrypt
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
readline
Reflection
session
sockets
SPL
sqlite3
standard
tokenizer
zlib

[Zend Modules]

[root@localhost php.d]# 
Run Code Online (Sandbox Code Playgroud)

它表明没有mbstring,dom或simplexml模块。

我已经尝试了所有可以在Google上找到的内容,但似乎无法安装这3个模块。

php -v返回此

PHP 7.2.7 (cli) (built: Jun 20 2018 08:21:26) ( NTS )
Copyright (c) 1997-2018 The PHP …
Run Code Online (Sandbox Code Playgroud)

php dom simplexml mbstring php-7.2

5
推荐指数
1
解决办法
1万
查看次数

MB_CASE _ * _ SIMPLE常量的用途是什么?

根据手册,在PHP 7.3中添加了以下常量:

  • MB_CASE_FOLD
  • MB_CASE_LOWER_SIMPLE
  • MB_CASE_UPPER_SIMPLE
  • MB_CASE_TITLE_SIMPLE
  • MB_CASE_FOLD_SIMPLE

我找到了一个做什么的例子MB_CASE_FOLD

echo mb_convert_case('?', MB_CASE_FOLD, 'UTF-8'); // ss
Run Code Online (Sandbox Code Playgroud)

但是,我找不到任何有关MB_CASE_*_SIMPLE常量的引用。

乍一看,使用简单的latin1字符,MB_CASE_LOWER_SIMPLE其行为就像MB_CASE_LOWER

什么的MB_CASE_*_SIMPLE从他们做不同MB_CASE_*的同行?

php mbstring

5
推荐指数
2
解决办法
48
查看次数

php mb_convert_case() 保留大写的单词

假设我有一个字符串“HET1200 文本字符串”,我需要将其更改为“HET1200 文本字符串”。编码将是 UTF-8。

我怎样才能做到这一点?目前,我使用mb_convert_case($string, MB_CASE_TITLE, "UTF-8");但将“HET1200”更改为“Het1200。

我可以指定一个例外,但它不会是详尽无遗的。所以我宁愿所有的大写单词都保持大写。

谢谢 :)

php string utf-8 mbstring

4
推荐指数
1
解决办法
2016
查看次数

将 mbstring 添加到 laravel 5 应用程序的 docker 图像

我是 docker 的新手,我正在尝试设置它以便与 Laravel 5.1 一起运行。我目前收到以下错误

Call to undefined function Illuminate\Foundation\Bootstrap\mb_internal_encoding() in /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php:43
Run Code Online (Sandbox Code Playgroud)

我相信这是因为mbstring没有安装 php 扩展。我试图添加php-mbstring到 Docker 文件,但它似乎不起作用。

这是我的完整 Docker 文件

FROM php:5.6.30-fpm

    RUN apt-get update && apt-get install -y libmcrypt-dev \
        mysql-client libmagickwand-dev --no-install-recommends \
        && pecl install imagick \
        && docker-php-ext-install mcrypt pdo_mysql \
        && docker-php-ext-install php-mbstring 
Run Code Online (Sandbox Code Playgroud)

然后我sudo docker compose up从应用程序文件夹运行。但这似乎并没有解决错误。我如何知道扩展是否安装正确?

编辑:我在下面包含了 docker-compose.yml 文件

version: '2'
services:

  # The Application
  app:
    build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www
    volumes:
      - ./:/var/www
    environment: …
Run Code Online (Sandbox Code Playgroud)

php mbstring laravel docker laravel-5

4
推荐指数
1
解决办法
7547
查看次数