у é и é разные значения ASCII - PullRequest
0 голосов
/ 01 ноября 2019

Я конвертирую специальные символы, используя htmlentities , но я натолкнулся на 2 различных типа é

<?php
header('Content-Type: text/html; charset=utf-8');
echo htmlentities("é")."\n";
echo htmlentities("é")."\n";
?>

Выходы:

é
&eacute;

Я вывелЗначения ASCII с использованием этого

echo ord("é");
echo ord("é");

выводит

101
195

Есть ли способ заставить htmlentities преобразовать e в пригодный для использования символ?

1 Ответ

1 голос
/ 09 ноября 2019

У нас есть 2 разные строки UTF-8.

<?php
var_dump("é" === "e\u{301}");
var_dump("é" === "\u{e9}");
//bool(true) bool(true)

Попробуйте самостоятельно: https://3v4l.org/QnHvg

Первая строка содержит 2 символа, ASCII "e" и Unicode U + 0301 . Вторая строка содержит символ U + 00E9 .

Строки можно легко заменить на str_replace. Рекомендуется использовать Unicode нотацию (PHP 7+), чтобы избежать недоразумений.

$string = str_replace("e\u{301}","\u{e9}",$string);
...