Замена ’символа в PHP

Мне нелегко пытаться заменить этот странный правильный символ одинарной кавычки. Я использую str_replace как это:

str_replace("’", '\u1234', $string);

Похоже, что я не могу выяснить, какова символ кавычка действительно. Даже когда я копирую, вставляют его непосредственно от PHPMyAdmin, это все еще не работает. Я должен выйти из него так или иначе?

Символ: http://www.lukomon.com/Afbeelding%204.png

  • MySQL Charset: Unicode UTF-8 (utf8)
  • MySQL Collations: utf8_unicode_ci

Править: Это оказалось Microsoft, покинутой одинарную кавычку, которую я мог заменить этой функцией из комментария Phill Paffords. Не уверенный, которые отвечают, что я должен отметить теперь..

5
задан Community 23 May 2017 в 12:01
поделиться

8 ответов

Это случилось и со мной. Пара вещей:

  • Используйте функцию htmlentities для вашего текста

    $my_text = htmlentities($string, ENT_QUOTES, 'UTF-8');

Подробнее о функции htmlentities.

  • Используйте правильный тип документа, это помогло мне.

  • Используйте utf-8 тип кодировки в вашей странице:

Вот окончательный прототип для вашей страницы:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>    
<body>

<?php     
    // your code related to database        
    $my_text = htmlentities($string, ENT_QUOTES, 'UTF-8');    
?>

</body>
</html>

.

Если вы хотите заменить его, попробуйте воспользоваться функцией mb_ereg_replace .

Пример:

mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");

$my_text = mb_ereg_replace("’","'", $string);
8
ответ дан 18 December 2019 в 09:48
поделиться

Почему бы не пропустить строку через htmlspecialchars () и не вывести ее, чтобы увидеть, во что она превращает этот символ, чтобы вы знали, что использовать в качестве выражения замены?

0
ответ дан 18 December 2019 в 09:48
поделиться

Чтобы заменить его:

Если ваш файл сценария закодирован в той же кодировке, что и данные, в которых вы пытаетесь выполнить замену, он должен работать так, как вы его разместили. Если вы работаете с данными UTF-8, убедитесь, что сценарий закодирован в UTF-8, и это не ваш редактор, который молча транслитерирует символ при его вставке.

Если это не сработает, попробуйте экранировать его, как описано ниже, и посмотрите, какой код он вернет.

Чтобы избежать этого:

Если исходный файл закодирован в UTF-8, это должно сработать:

$string = htmlentities($string, ENT_QUOTES, "UTF-8");

набор символов по умолчанию html ... - iso-8859 -1 . Все, что отличается от указанного, должно быть четко указано.

Для более сложных проблем с преобразованием символов всегда обращайтесь к комментариям пользователей к функциям вроде htmlentities () , там часто можно найти настоящие жемчужины.

В целом:

Бобинс прав в своем комментарии, системные проблемы с набором символов следует сортировать систематически, чтобы они не кусали вас за задницу - хотя бы путем определения того, какой набор символов используется на каждом этапе пути. :

  • Как кодируется файл сценария;
  • Как подается документ;
  • Как данные хранятся в базе данных;
  • Как кодируется соединение с базой данных.
1
ответ дан 18 December 2019 в 09:48
поделиться

Чтобы узнать, что это за символ, запустите его через функцию ord, которая даст вам ASCII-код символа:

echo ord('’'); // 226

Теперь, когда вы знаете, что это такое, вы можете сделать следующее:

str_replace('’', chr(226), $string);
2
ответ дан 18 December 2019 в 09:48
поделиться

Если вы используете в коде PHP символы, отличные от ASCII, вам нужно убедиться, что вы используете ту же кодировку символов, что и в обрабатываемых данных. Вероятно, ваша попытка не удалась, потому что вы используете другую кодировку символов в PHP-скрипте, чем в $string.

Кроме того, если вы используете многобайтовую кодировку символов, например UTF-8, вам также следует использовать функции multibyte aware string.

1
ответ дан 18 December 2019 в 09:48
поделиться

Gumbo sad right -
- сохраните ваш скрипт как файл utf-8
- и используйте http://php.net/mbstring (как указал Сарфраз в своем последнем примере)

1
ответ дан 18 December 2019 в 09:48
поделиться

Этот символ у вас правый одинарный знак кавычки .

Чтобы заменить его шаблоном, вы захотите сделать что-то вроде этого

$string = preg_replace( "/\\x{2019}/u", 'replacement', $string );

Но на самом деле это касается только симптома. Проблема в том, что у вас нет последовательного использования кодировок символов во всем приложении, как отмечали другие.

0
ответ дан 18 December 2019 в 09:48
поделиться

Не используйте никаких функций regex (preg_replace или mb_ereg_replace). Они слишком тяжелы для этого.

str_replace(chr(226),'\u2019' , $string);

Если ваша игла представляет собой многобайтовый символ, вам может повезти больше с этой функцией:

<?php 
function mb_str_replace($needle, $replacement, $haystack) {
    $needle_len = mb_strlen($needle);
    $replacement_len = mb_strlen($replacement);
    $pos = mb_strpos($haystack, $needle);
    while ($pos !== false)
    {
        $haystack = mb_substr($haystack, 0, $pos) . $replacement
                . mb_substr($haystack, $pos + $needle_len);
        $pos = mb_strpos($haystack, $needle, $pos + $replacement_len);
    }
    return $haystack; 
} 
?>

кредит для этой последней функции: http://www.php.net/manual/en/ref.mbstring.php#86120

0
ответ дан 18 December 2019 в 09:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: