PHP - избавление от фигурных апострофов - PullRequest
7 голосов
/ 22 октября 2009

Я пытаюсь избавиться от вьющихся апострофов (якобы вставленных из какого-то документа с богатым текстом), и мне кажется, что я нахожусь на дороге. Код ниже не работает для меня.

$word = "Today’s";
$search = array('„', '“', '’');
$replace = array('"', '"', "'");
$word = str_replace($search, $replace, htmlentities($word, ENT_QUOTES));

What I end up with is $word containing 'Today’s'.

Когда я удаляю амперсанды из массива $ search, происходит замена, но это, очевидно, не выполнит работу, так как амперсанд остается в строке. Почему происходит сбой str_replace, когда он сталкивается с амперсандами?

Ответы [ 2 ]

11 голосов
/ 22 октября 2009

Почему бы просто не сделать это:

$word = htmlentities(str_replace($search, $replace, $word), ENT_QUOTES);

6 голосов
/ 07 февраля 2012

Для того, чтобы все работало правильно, мне нужно что-то более надежное, чем пример @cletus. Вот что сработало для меня:

// String full of rich characters
$string = $_POST['annoying_characters'];

// Replace "rich" entities with standard text ones
$search = array(
    '“', // 1. Left Double Quotation Mark “
    '”', // 2. Right Double Quotation Mark ”
    '‘', // 3. Left Single Quotation Mark ‘
    '’', // 4. Right Single Quotation Mark ’
    ''',  // 5. Normal Single Quotation Mark '
    '&',   // 6. Ampersand &
    '"',  // 7. Normal Double Qoute
    '&lt;',    // 8. Less Than <
    '&gt;'     // 9. Greater Than >
);

$replace = array(
    '"', // 1
    '"', // 2
    "'", // 3
    "'", // 4
    "'", // 5
    "'", // 6
    '"', // 7
    "<", // 8
    ">"  // 9
);

// Fix the String
$fixed_string = htmlspecialchars($string, ENT_QUOTES);
$fixed_string = str_replace($search, $replace, $fixed_string);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...