Мне нелегко пытаться заменить этот странный правильный символ одинарной кавычки. Я использую str_replace как это:
str_replace("’", '\u1234', $string);
Похоже, что я не могу выяснить, какова символ кавычка действительно. Даже когда я копирую, вставляют его непосредственно от PHPMyAdmin, это все еще не работает. Я должен выйти из него так или иначе?
Символ: http://www.lukomon.com/Afbeelding%204.png
Править: Это оказалось Microsoft, покинутой одинарную кавычку, которую я мог заменить этой функцией из комментария Phill Paffords. Не уверенный, которые отвечают, что я должен отметить теперь..
Это случилось и со мной. Пара вещей:
Используйте функцию 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);
Почему бы не пропустить строку через htmlspecialchars () и не вывести ее, чтобы увидеть, во что она превращает этот символ, чтобы вы знали, что использовать в качестве выражения замены?
Чтобы заменить его:
Если ваш файл сценария закодирован в той же кодировке, что и данные, в которых вы пытаетесь выполнить замену, он должен работать так, как вы его разместили. Если вы работаете с данными UTF-8, убедитесь, что сценарий закодирован в UTF-8, и это не ваш редактор, который молча транслитерирует символ при его вставке.
Если это не сработает, попробуйте экранировать его, как описано ниже, и посмотрите, какой код он вернет.
Чтобы избежать этого:
Если исходный файл закодирован в UTF-8, это должно сработать:
$string = htmlentities($string, ENT_QUOTES, "UTF-8");
набор символов по умолчанию html ...
- iso-8859 -1
. Все, что отличается от указанного, должно быть четко указано.
Для более сложных проблем с преобразованием символов всегда обращайтесь к комментариям пользователей к функциям вроде htmlentities ()
, там часто можно найти настоящие жемчужины.
В целом:
Бобинс прав в своем комментарии, системные проблемы с набором символов следует сортировать систематически, чтобы они не кусали вас за задницу - хотя бы путем определения того, какой набор символов используется на каждом этапе пути. :
Чтобы узнать, что это за символ, запустите его через функцию ord
, которая даст вам ASCII-код символа:
echo ord('’'); // 226
Теперь, когда вы знаете, что это такое, вы можете сделать следующее:
str_replace('’', chr(226), $string);
Если вы используете в коде PHP символы, отличные от ASCII, вам нужно убедиться, что вы используете ту же кодировку символов, что и в обрабатываемых данных. Вероятно, ваша попытка не удалась, потому что вы используете другую кодировку символов в PHP-скрипте, чем в $string
.
Кроме того, если вы используете многобайтовую кодировку символов, например UTF-8, вам также следует использовать функции multibyte aware string.
Gumbo sad right -
- сохраните ваш скрипт как файл utf-8
- и используйте http://php.net/mbstring (как указал Сарфраз в своем последнем примере)
Этот символ у вас правый одинарный знак кавычки .
Чтобы заменить его шаблоном, вы захотите сделать что-то вроде этого
$string = preg_replace( "/\\x{2019}/u", 'replacement', $string );
Но на самом деле это касается только симптома. Проблема в том, что у вас нет последовательного использования кодировок символов во всем приложении, как отмечали другие.
Не используйте никаких функций 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