Str replace php не работает

str_replace не заменяет 21 дек 2012 .

Есть статья, хочу в ней почистить всякое. Для примера делаю так
$content = str_replace(«

«, «», $content);
Если я вставляю данный скрипт на страничку вывода этой самой статьи он прекрасно отрабатывает, но решил сделать красиво и удалять это перед записью моей cms в БД. Вставил туда это и с удивлением обнаружил, что замена тегов не получается. Если меняю любой просто текст всё прекрасно, » » видимо и есть камень преткновения. Подскажите как это можно победить?

наверное перед заменой ты где-то делаешь htmlspecialchars

спасибо за помощь, но не помогло, к счастью это легко решается регуляркой (и почему я сразу об этом не подумал? ))

кстати, с некоторыми тегами мне удалось разобраться. Сделал предварительное «правильное» форматирование, ибо там встречались варианты по типу таких «

«, дальше решил попробовать более сложные элементы по типу ссылок вот тут опять получилась загвоздка.
Попробовал такую регулярку. На странице с 2-мя ссылками (разные домены). Одну ест, вторую не хочет.

Операционный масштаб Minute

Цена GBP/USD, отбившись от 1/2 Median Line Minute (1.6289), оказалась в границах зоны равновесия вил младшего операционного масштаба Minuette 1.6210 1.6175 1.6142, отработка которых и станет определять движение цены инструмента в оставшиеся дни торговых сессий 2012 г. (с 24 по 31 декабря).

Детализация вариантов движения:

-> флетовое движение в границах зоны равновесия вил младшего операционного масштаба Minuette -> 1.6210 1.6175 1.6142;

-> пробой уровня сопротивления 1.6210 на верхней границе зоны равновесия вил младшего операционного масштаба ISL38.2 Minuette направит цену к границам канала 1/2 Median Line Minuette -> 1.6233 1.6253 1.6275, а пробой 1/2 Median Line Minute (1.6289) сделает возможным достижение целей -> 1.6314 (начальная линия SSL Minuette) 1.6369 (верхняя граница канала 1/2 Median Line вил старшего операционного масштаба Minute);

-> пробой уровня поддержки 1.6142 на нижней границе зоны равновесия вил младшего операционного масштаба ISL61.8 Minuette сделает актуальным продолжение нисходящего движения к целевым уровням -> 1.6081 (начальная линия вил старшего операционного масштаба SSL Minute) 1.6036 (конечная линия FSL Minuette) 1.5967 (предупредительная линия LWL50.0 Minuette) 1.5953 (контрольная линия LTL Minute).

Материал предоставлен компанией Instaforex — instaforex.com

Операционный масштаб Minute

Цена Gold, отбившись от Median Line Minute (1635.07), на текущий момент не смогла пробить уровень сопротивления 1658.99 на нижней границе зоны равновесия вил младшего операционного масштаба ISL61.8 Minuette, тем самым оказалась в диапазоне -> 1649.08 (ISL38.2 Minute) 1658.99 (ISL61.8 Minuette), направление выхода из которого и станет определять развитие движения цены инструмента с 24 по 31 декабря 2012 г.

Детализация вариантов движения:

-> возможно флетовое движение в этом диапазоне -> 1649.08 (верхняя граница зоны равновесия вил старшего операционного масштаба ISL38.2 Minute) 1658.99 (нижняя граница зоны равновесия вил младшего операционного масштаба ISL61.8 Minuette);

-> пробой уровня сопротивления 1658.99 (ISL61.8 Minuette) определит движение в границах зоны равновесия вил младшего операционного масштаба Minuette -> 1658.99 1664.89 1670.38, в случае пробоя ISL38.2 Minuette (1670.38) цена вернется в границы канала 1/2 Median Line вил старшего операционного масштаба Minute -> 1670.38 1681.83 1693.28, движение внутри которых станет зависеть от отработки уровней границ канала 1/2 Median Line Minuette (1677.30 1681.83 1688.03), взаимодействие указанных уровней показано на графике;

-> пробой уровня поддержки 1649.08 (ISL38.2 Minute) вернет движение цены инструмента в границы зоны равновесия вил старшего операционного масштаба Minute -> 1649.08 1635.07 1619.80, данное движение так же станет определяться отработкой уровней линий вил младшего операционного масштаба Minuette, подробности смотрим на графике, в случае пробоя ISL61.8 Minute (1619.80) движение может быть продолжено к целевым уровням -> 1610.49 (контрольная линия LTL Minuette) 1572.55 (конечная линия FSL Minute).

Источник

В каком случае PHP «str_replace» работает некорректно?

Ниже приведен код PHP, который я использую.

str_replace не работает в следующем случае:

5 ответов

Прежде всего, вы открываете один и тот же файл три раза и закрываете его только один раз. Это не серьезная проблема, но вам действительно следует выработать привычку заканчивать / закрывать то, что вы начали. Вы можете пропустить один из этих fopen , используя file_get_contents :

Теперь str_replace заменит каждое вхождение вашей строки. Если, например, $line_of_text[1] равно «11», а $icc равно «9», это повлияет на другие значения в файле, такие как «110», что сделает остальные будущие замены все менее надежными. каждую петлю.

Если я не ошибаюсь, и все, что вам нужно сделать, это заменить одну ячейку в каждой строке, вот предложение: Создайте пустую переменную, скажем $new_content

Теперь измените ваш цикл:

$ content = str_replace («$ line_of_text [1]», «$ icc», «$ content»);

Это должно быть заменено

$ content = str_replace ($ line_of_text [1], $ icc, $ content);

Поскольку это переменные php, и помещать их в двойные или одинарные кавычки неправильно, так как они будут рассматриваться как обычный текст, и str_replace попытается заменить «$ line_of_text [1]» на «$ icc» в «$ content».

Не уверен, что понимаю, но нет причин, по которым str_replace не работает.
Возможно, это просто вопрос рассуждения.
Не работает совсем или только в некоторых случаях?
В некоторых случаях это может быть связано с тем, что заменяющее значение больше не существует.

Не знаю, ваша ли проблема в этом, но это можно объяснить.

Так что, возможно, вам стоит сделать что-то вроде этого:

В противном случае, я согласен с остальными, двойные кавычки необязательны. 🙂

Нет выходных данных отладки .. Могу только дать несколько советов ..

  • Выводит ли $ line_of_text [1] и $ icc ожидаемые значения?
  • Возвращает ли sqlsrv_fetch_array ($ stmt, SQLSRV_FETCH_ASSOC) правильное значение? (В противном случае это ничего не сделает)
  • Как структурирован ваш CSV-файл?

Удалите кавычки вокруг переменных.

Используйте этот код, соответствующий циклу while

Источник

Str replace php не работает

Здесь могла бы быть ваша реклама

Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel

Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.

Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо

После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..

Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.

Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.

На последок как оно происходит на форумах

Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.

Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12

Источник

Работа str_replace с кириллицей, utf-8

Подскажите, как вы выходите из положения когда нужно вырезать какое-то кириллическое слово, букву из текста. ( str_replace не работает)
Пробовал самописные функции по типу mb_str_replace — ни одна не дала должного результата.

Пример:
Допустим у нас есть строка: $calc = «1ч20мин+1ч50мин»;
И из нее нужно убрать «мин».

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

2 ответа 2

Если исходная кодировка заранее неизвестна и например нужно привести текст к общей кодировке utf-8.

Вы делаете что-то неправильно, функция str_replace успешно работает на данном кейсе.

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

Если Вы хотите перевести строку в другую кодировку, воспользуйтесь функцией iconv

Всё ещё ищете ответ? Посмотрите другие вопросы с метками php строки utf-8 кириллица или задайте свой вопрос.

Связанные

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.10.15.40479

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

str_replace

(PHP 4, PHP 5, PHP 7, PHP 8)

str_replace — Заменяет все вхождения строки поиска на строку замены

Описание

Эта функция возвращает строку или массив, в котором все вхождения search в subject заменены на replace .

Если не нужны сложные правила поиска/замены (например, регулярные выражения), использование этой функции предпочтительнее preg_replace() .

Список параметров

Если search и replace — массивы, то str_replace() использует каждое значение из соответствующего массива для поиска и замены в subject . Если в массиве replace меньше элементов, чем в search , в качестве строки замены для оставшихся значений будет использована пустая строка. Если search — массив, а replace — строка, то эта строка замены будет использована для каждого элемента массива search . Обратный случай смысла не имеет.

Если search или replace являются массивами, их элементы будут обработаны от первого к последнему.

Искомое значение, также известное как needle (иголка). Для множества искомых значений можно использовать массив.

Значение замены, будет использовано для замены искомых значений search . Для множества значений можно использовать массив.

Строка или массив, в котором производится поиск и замена, также известный как haystack (стог сена).

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

Если передан, то будет установлен в количество произведённых замен.

Возвращаемые значения

Эта функция возвращает строку или массив с заменёнными значениями.

Примеры

Пример #1 Примеры использования str_replace()

// присваивает
$bodytag = str_replace ( «%body%» , «black» , » » );

// присваивает: Hll Wrld f PHP
$vowels = array( «a» , «e» , «i» , «o» , «u» , «A» , «E» , «I» , «O» , «U» );
$onlyconsonants = str_replace ( $vowels , «» , «Hello World of PHP» );

// присваивает: You should eat pizza, beer, and ice cream every day
$phrase = «You should eat fruits, vegetables, and fiber every day.» ;
$healthy = array( «fruits» , «vegetables» , «fiber» );
$yummy = array( «pizza» , «beer» , «ice cream» );

$newphrase = str_replace ( $healthy , $yummy , $phrase );

// присваивает: 2
$str = str_replace ( «ll» , «» , «good golly miss molly!» , $count );
echo $count ;
?>

Пример #2 Примеры потенциальных трюков с str_replace()

// Порядок замены
$str = «Строка 1\nСтрока 2\rСтрока 3\r\nСтрока 4\n» ;
$order = array( «\r\n» , «\n» , «\r» );
$replace = ‘
‘ ;

// Обрабатывает сначала \r\n для избежания их повторной замены.
echo $newstr = str_replace ( $order , $replace , $str );

// Выводит F, т.к. A заменяется на B, затем B на C, и так далее.
// В итоге E будет заменено F, так как замена происходит слева направо.
$search = array( ‘A’ , ‘B’ , ‘C’ , ‘D’ , ‘E’ );
$replace = array( ‘B’ , ‘C’ , ‘D’ , ‘E’ , ‘F’ );
$subject = ‘A’ ;
echo str_replace ( $search , $replace , $subject );

// Выводит: яблорехкорех орех (по вышеуказанной причине)
$letters = array( ‘я’ , ‘о’ );
$fruit = array( ‘яблоко’ , ‘орех’ );
$text = ‘я о’ ;
$output = str_replace ( $letters , $fruit , $text );
echo $output ;
?>

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Замечание о порядке замены

Так как str_replace() осуществляет замену слева направо, то при использовании множественных замен она может заменить ранее вставленное значение на другое. Смотрите также примеры на этой странице.

Эта функция чувствительна к регистру. Используйте str_ireplace() для замены без учёта регистра.

Смотрите также

  • str_ireplace() — Регистронезависимый вариант функции str_replace
  • substr_replace() — Заменяет часть строки
  • preg_replace() — Выполняет поиск и замену по регулярному выражению
  • strtr() — Преобразует заданные символы или заменяет подстроки

User Contributed Notes 34 notes

A faster way to replace the strings in multidimensional array is to json_encode() it, do the str_replace() and then json_decode() it, like this:

function str_replace_json ( $search , $replace , $subject ) <
return json_decode ( str_replace ( $search , $replace , json_encode ( $subject )));

>
?>

This method is almost 3x faster (in 10000 runs.) than using recursive calling and looping method, and 10x simpler in coding.

function str_replace_deep ( $search , $replace , $subject )
<
if ( is_array ( $subject ))
<
foreach( $subject as & $oneSubject )
$oneSubject = str_replace_deep ( $search , $replace , $oneSubject );
unset( $oneSubject );
return $subject ;
> else <
return str_replace ( $search , $replace , $subject );
>
>
?>

Note that this does not replace strings that become part of replacement strings. This may be a problem when you want to remove multiple instances of the same repetative pattern, several times in a row.

If you want to remove all dashes but one from the string ‘-aaa—-b-c——d—e—f’ resulting in ‘-aaa-b-c-d-e-f’, you cannot use str_replace. Instead, use preg_replace:

= ‘-aaa—-b-c——d—e—f’ ;
echo str_replace ( ‘—‘ , ‘-‘ , $challenge ). ‘
‘ ;
echo preg_replace ( ‘/—+/’ , ‘-‘ , $challenge ). ‘
‘ ;
?>

This outputs the following:
-aaa—b-c—d-e—f
-aaa-b-c-d-e-f

Be careful when replacing characters (or repeated patterns in the FROM and TO arrays):

= array( «1» , «2» , «3» , «B» );
$arrTo = array( «A» , «B» , «C» , «D» );
$word = «ZBB2» ;
echo str_replace ( $arrFrom , $arrTo , $word );
?>

I would expect as result: «ZDDB»
However, this return: «ZDDD»
(Because B = D according to our array)

To make this work, use «strtr» instead:

= array( «1» => «A» , «2» => «B» , «3» => «C» , «B» => «D» );
$word = «ZBB2» ;
echo strtr ( $word , $arr );
?>

This returns: «ZDDB»

Be aware that if you use this for filtering & sanitizing some form of user input, or remove ALL instances of a string, there’s another gotcha to watch out for:

// Remove all double characters
$string=»1001011010″;
$string=str_replace(array(«11″,»00″),»»,$string);
// Output: «110010»

$string=» ml> Malicious code html> etc»;
$string=str_replace(array(» «,» «),»»,$string);
// Output: » Malicious code etc»

Feel free to optimize this using the while/for or anything else, but this is a bit of code that allows you to replace strings found in an associative array.

For example:
= array(
‘dog’ => ‘cat’ ,
‘apple’ => ‘orange’
‘chevy’ => ‘ford’
);

$string = ‘I like to eat an apple with my dog in my chevy’ ;

echo str_replace_assoc ( $replace , $string );

// Echo: I like to eat an orange with my cat in my ford
?>

Here is the function:

function strReplaceAssoc (array $replace , $subject ) <
return str_replace ( array_keys ( $replace ), array_values ( $replace ), $subject );
>
?>

[Jun 1st, 2010 — EDIT BY thiago AT php DOT net: Function has been replaced with an updated version sent by ljelinek AT gmail DOT com]

This is what happens when the search and replace arrays are different sizes:

= array( ‘a’ , ‘b’ , ‘c’ , ‘d’ , ‘e’ );
$replace = array( ‘A’ , ‘B’ , ‘C’ );
$subject = ‘abcdefg’ ;
echo str_replace ( $search , $replace , $subject );
// result: ‘ABCfg’

$search = array( ‘a’ , ‘b’ , ‘c’ );
$replace = array( ‘A’ , ‘B’ , ‘C’ , ‘D’ , ‘E’ );
$subject = ‘abcdefg’ ;
echo str_replace ( $search , $replace , $subject );
// result: ‘ABCdefg’
?>

No warning or error is generated in either of these cases.

As previous commentators mentioned, when $search contains values that occur earlier in $replace, str_replace will factor those previous replacements into the process rather than operating solely on the original string. This may produce unexpected output.

= array( ‘A’ , ‘B’ , ‘C’ , ‘D’ , ‘E’ );
$replace = array( ‘B’ , ‘C’ , ‘D’ , ‘E’ , ‘F’ );
$subject = ‘ABCDE’ ;

echo str_replace ( $search , $replace , $subject ); // output: ‘FFFFFF’
?>

In the above code, the $search and $replace should replace each occurrence in the $subject with the next letter in the alphabet. The expected output for this sample is ‘BCDEF’; however, the actual output is ‘FFFFF’.

To more clearly illustrate this, consider the following example:

= array( ‘A’ , ‘B’ , ‘C’ , ‘D’ , ‘E’ );
$replace = array( ‘B’ , ‘C’ , ‘D’ , ‘E’ , ‘F’ );
$subject = ‘A’ ;

echo str_replace ( $search , $replace , $subject ); // output: ‘F’
?>

Since ‘A’ is the only letter in the $search array that appears in $subject, one would expect the result to be ‘B’; however, replacement number $n does *not* operate on $subject, it operates on $subject after the previous $n-1 replacements have been completed.

The following function utilizes array_combine and strtr to produce the expected output, and I believe it is the most efficient way to perform the desired string replacement without prior replacements affecting the final result.

/**
* When using str_replace(. ), values that did not exist in the original string (but were put there by previous
* replacements) will be replaced continuously. This string replacement function is designed replace the values
* in $search with those in $replace while not factoring in prior replacements. Note that this function will
* always look for the longest possible match first and then work its way down to individual characters.
*
* The «o» in «stro_replace» represents «original», indicating that the function operates only on the original string.
*
* @param array $search list of strings or characters that need to be replaced
* @param array $replace list of strings or characters that will replace the corresponding values in $search
* @param string $subject the string on which this operation is being performed
*
* @return string $subject with all substrings in the $search array replaced by the values in the $replace array
*/
function stro_replace ( $search , $replace , $subject )
<
return strtr ( $subject , array_combine ( $search , $replace ) );
>

$search = array( ‘A’ , ‘B’ , ‘C’ , ‘D’ , ‘E’ );
$replace = array( ‘B’ , ‘C’ , ‘D’ , ‘E’ , ‘F’ );
$subject = ‘ABCDE’ ;

echo stro_replace ( $search , $replace , $subject ); // output: ‘BCDEF’
?>

Some other examples:

= array( ‘ ‘ , ‘&’ );
$replace = array( ‘ ‘ , ‘&’ );
$subject = ‘Hello & goodbye!’ ;

// We want to replace the spaces with and the ampersand with &
echo str_replace ( $search , $replace , $subject ); // output: «Hello&nbsp&&nbspgoodbye!» — wrong!

echo stro_replace ( $search , $replace , $subject ); // output: «Hello & goodbye!» — correct!

/*
Note: Run the above code in the CLI or view source on your web browser — the replacement strings for stro_replace are HTML entities which the browser interprets.
*/
?>

= array( ‘ERICA’ , ‘AMERICA’ );
$replace = array( ‘JON’ , ‘PHP’ );
$subject = ‘MIKE AND ERICA LIKE AMERICA’ ;

// We want to replace the name «ERICA» with «JON» and the word «AMERICA» with «PHP»
echo str_replace ( $search , $replace , $subject ); // output: «MIKE AND JON LIKE AMJON», which is not correct

echo stro_replace ( $search , $replace , $subject ); // output: «MIKE AND JON LIKE PHP», which is correct
?>

Here’s a deep replace function allowing multi-dimensional arrays in $search, $replace and $subject. The keys and other structure of $subject are preserved.

// Auxiliary function:
function _replaceWithAnything ( $search , $replace , $subject ) <
if(! is_array ( $search ) || ! is_array ( $replace )) <
$search =array( $search );
$replace =array( $replace );
>
$match = array_search ( $subject , $search , true );
if( $match !== false && array_key_exists ( $match , $replace ))
$subject = $replace [ $match ];
return $subject ;
>

// Main function:
function deepReplace ( $search , $replace , $subject ) <
if(! is_array ( $subject ))
return _replaceWithAnything ( $search , $replace , $subject );
foreach( $subject as & $val ) <
if( is_array ( $val )) <
$val = deepReplace ( $search , $replace , $val );
continue;
>
$val = _replaceWithAnything ( $search , $replace , $val );
>
return $subject ;
>
?>

This strips out horrible MS word characters.

Just keep fine tuning it until you get what you need, you’ll see ive commented some out which caused problems for me.

There could be some that need adding in, but its a start to anyone who wishes to make their own custom function.

function msword_conversion ( $str )
<
$str = str_replace ( chr ( 130 ), ‘,’ , $str ); // baseline single quote
$str = str_replace ( chr ( 131 ), ‘NLG’ , $str ); // florin
$str = str_replace ( chr ( 132 ), ‘»‘ , $str ); // baseline double quote
$str = str_replace ( chr ( 133 ), ‘. ‘ , $str ); // ellipsis
$str = str_replace ( chr ( 134 ), ‘**’ , $str ); // dagger (a second footnote)
$str = str_replace ( chr ( 135 ), ‘***’ , $str ); // double dagger (a third footnote)
$str = str_replace ( chr ( 136 ), ‘^’ , $str ); // circumflex accent
$str = str_replace ( chr ( 137 ), ‘o/oo’ , $str ); // permile
$str = str_replace ( chr ( 138 ), ‘Sh’ , $str ); // S Hacek
$str = str_replace ( chr ( 139 ), ‘ , $str ); // left single guillemet
// $str = str_replace(chr(140), ‘OE’, $str); // OE ligature
$str = str_replace ( chr ( 145 ), «‘» , $str ); // left single quote
$str = str_replace ( chr ( 146 ), «‘» , $str ); // right single quote
// $str = str_replace(chr(147), ‘»‘, $str); // left double quote
// $str = str_replace(chr(148), ‘»‘, $str); // right double quote
$str = str_replace ( chr ( 149 ), ‘-‘ , $str ); // bullet
$str = str_replace ( chr ( 150 ), ‘-–’ , $str ); // endash
$str = str_replace ( chr ( 151 ), ‘—‘ , $str ); // emdash
// $str = str_replace(chr(152), ‘

‘, $str); // tilde accent
// $str = str_replace(chr(153), ‘(TM)’, $str); // trademark ligature
$str = str_replace ( chr ( 154 ), ‘sh’ , $str ); // s Hacek
$str = str_replace ( chr ( 155 ), ‘>’ , $str ); // right single guillemet
// $str = str_replace(chr(156), ‘oe’, $str); // oe ligature
$str = str_replace ( chr ( 159 ), ‘Y’ , $str ); // Y Dieresis
$str = str_replace ( ‘°C’ , ‘°C’ , $str ); // Celcius is used quite a lot so it makes sense to add this in
$str = str_replace ( ‘£’ , ‘£’ , $str );
$str = str_replace ( «‘» , «‘» , $str );
$str = str_replace ( ‘»‘ , ‘»‘ , $str );
$str = str_replace ( ‘–’ , ‘–’ , $str );

// a very beatiful way to do multiple replacements is this one, using just one array
$replaceThis = Array(
‘old word’ => ‘new word’ ,
‘was’ => ‘it’ ,
‘past’ => ‘future’ ,
);

$originalText = «every old word was a thing of the past. » ;
$replacedText = str_replace ( array_keys ( $replaceThis ), $replaceThis , $originalText );
echo $replacedText ;
?>

As an effort to remove those Word copy and paste smart quotes, I’ve found that this works with UTF8 encoded strings (where $text in the following example is UTF8). Also the elipsis and em and en dashes are replaced.

There is an «invisible» character after the †for the right side double smart quote that doesn’t seem to display here. It is chr(157).

[] = ‘“’ ; // left side double smart quote
$find [] = ‘”’ ; // right side double smart quote
$find [] = ‘‘’ ; // left side single smart quote
$find [] = ‘’’ ; // right side single smart quote
$find [] = ‘…’ ; // elipsis
$find [] = ‘—’ ; // em dash
$find [] = ‘–’ ; // en dash

$replace [] = ‘»‘ ;
$replace [] = ‘»‘ ;
$replace [] = «‘» ;
$replace [] = «‘» ;
$replace [] = «. » ;
$replace [] = «-» ;
$replace [] = «-» ;

$text = str_replace ( $find , $replace , $text );
?>

nikolaz dot tang at hotmail dot com’s solution of using json_encode/decode is interesting, but a couple of issues to be aware of with it.

// From: nikolaz dot tang at hotmail dot com’s post
function str_replace_json ( $search , $replace , $subject ) <
return json_decode ( str_replace ( $search , $replace , json_encode ( $subject )));
>
?>

json_decode will return objects, where arrays are probably expected. This is easily remedied by adding 2nd parameter ‘true’ to json_decode.

$search and $replace could contain strings that match json encoding, which will either change the structure returned by this method, or break the json.

ie:
( str_replace_json ( ‘»:»‘ , ‘»,»‘ , [ ‘this’ => ‘stuff’ ]));
var_dump ( str_replace_json ( ‘this»:»‘ , ‘this» : «thing», «with»:»‘ , [ ‘this’ => ‘stuff’ ]));
?>

Might be worth mentioning that a SIMPLE way to accomplish Example 2 (potential gotchas) is to simply start your «replacements» in reverse.

So instead of starting from «A» and ending with «E»:

= array( ‘A’ , ‘B’ , ‘C’ , ‘D’ , ‘E’ );
$replace = array( ‘B’ , ‘C’ , ‘D’ , ‘E’ , ‘F’ );
// replaces A to B, B to C, C to D, D to E, E to F (makes them all F)
// start from «E» and end with «A»:

$search = array( ‘E’ , ‘D’ , ‘C’ , ‘B’ , ‘A’ );
$replace = array( ‘F’ , ‘E’ , ‘D’ , ‘C’ , ‘B’ );
// replaces E to F, D to E, C to D, B to C, A to B (prevents from
// multiple replacements of already replaced values)
?>

So basically start from the «end» and put the replacements in an order where the «replaced value» won’t equal a value that exists later in the «search array».

/**
* Convert foreign 8859-1 characters into HTML entities.
*
* @param string $str
* The string being parsed.
*
* @return string
* The converted string.
*/
public static function convert_chars_to_entities ( $str )
<
$str = str_replace ( ‘À’ , ‘À’ , $str );
$str = str_replace ( ‘Á’ , ‘Á’ , $str );
$str = str_replace ( ‘Â’ , ‘Â’ , $str );
$str = str_replace ( ‘Ã’ , ‘Ã’ , $str );
$str = str_replace ( ‘Ä’ , ‘Ä’ , $str );
$str = str_replace ( ‘Å’ , ‘Å’ , $str );
$str = str_replace ( ‘Æ’ , ‘Æ’ , $str );
$str = str_replace ( ‘Ç’ , ‘Ç’ , $str );
$str = str_replace ( ‘È’ , ‘È’ , $str );
$str = str_replace ( ‘É’ , ‘É’ , $str );
$str = str_replace ( ‘Ê’ , ‘Ê’ , $str );
$str = str_replace ( ‘Ë’ , ‘Ë’ , $str );
$str = str_replace ( ‘Ì’ , ‘Ì’ , $str );
$str = str_replace ( ‘Í’ , ‘Í’ , $str );
$str = str_replace ( ‘Î’ , ‘Î’ , $str );
$str = str_replace ( ‘Ï’ , ‘Ï’ , $str );
$str = str_replace ( ‘Ð’ , ‘Ð’ , $str );
$str = str_replace ( ‘Ñ’ , ‘Ñ’ , $str );
$str = str_replace ( ‘Ò’ , ‘Ò’ , $str );
$str = str_replace ( ‘Ó’ , ‘Ó’ , $str );
$str = str_replace ( ‘Ô’ , ‘Ô’ , $str );
$str = str_replace ( ‘Õ’ , ‘Õ’ , $str );
$str = str_replace ( ‘Ö’ , ‘Ö’ , $str );
$str = str_replace ( ‘×’ , ‘×’ , $str ); // Yeah, I know. But otherwise the gap is confusing. —Kris
$str = str_replace ( ‘Ø’ , ‘Ø’ , $str );
$str = str_replace ( ‘Ù’ , ‘Ù’ , $str );
$str = str_replace ( ‘Ú’ , ‘Ú’ , $str );
$str = str_replace ( ‘Û’ , ‘Û’ , $str );
$str = str_replace ( ‘Ü’ , ‘Ü’ , $str );
$str = str_replace ( ‘Ý’ , ‘Ý’ , $str );
$str = str_replace ( ‘Þ’ , ‘Þ’ , $str );
$str = str_replace ( ‘ß’ , ‘ß’ , $str );
$str = str_replace ( ‘à’ , ‘à’ , $str );
$str = str_replace ( ‘á’ , ‘á’ , $str );
$str = str_replace ( ‘â’ , ‘â’ , $str );
$str = str_replace ( ‘ã’ , ‘ã’ , $str );
$str = str_replace ( ‘ä’ , ‘ä’ , $str );
$str = str_replace ( ‘å’ , ‘å’ , $str );
$str = str_replace ( ‘æ’ , ‘æ’ , $str );
$str = str_replace ( ‘ç’ , ‘ç’ , $str );
$str = str_replace ( ‘è’ , ‘è’ , $str );
$str = str_replace ( ‘é’ , ‘é’ , $str );
$str = str_replace ( ‘ê’ , ‘ê’ , $str );
$str = str_replace ( ‘ë’ , ‘ë’ , $str );
$str = str_replace ( ‘ì’ , ‘ì’ , $str );
$str = str_replace ( ‘í’ , ‘í’ , $str );
$str = str_replace ( ‘î’ , ‘î’ , $str );
$str = str_replace ( ‘ï’ , ‘ï’ , $str );
$str = str_replace ( ‘ð’ , ‘ð’ , $str );
$str = str_replace ( ‘ñ’ , ‘ñ’ , $str );
$str = str_replace ( ‘ò’ , ‘ò’ , $str );
$str = str_replace ( ‘ó’ , ‘ó’ , $str );
$str = str_replace ( ‘ô’ , ‘ô’ , $str );
$str = str_replace ( ‘õ’ , ‘õ’ , $str );
$str = str_replace ( ‘ö’ , ‘ö’ , $str );
$str = str_replace ( ‘÷’ , ‘÷’ , $str ); // Yeah, I know. But otherwise the gap is confusing. —Kris
$str = str_replace ( ‘ø’ , ‘ø’ , $str );
$str = str_replace ( ‘ù’ , ‘ù’ , $str );
$str = str_replace ( ‘ú’ , ‘ú’ , $str );
$str = str_replace ( ‘û’ , ‘û’ , $str );
$str = str_replace ( ‘ü’ , ‘ü’ , $str );
$str = str_replace ( ‘ý’ , ‘ý’ , $str );
$str = str_replace ( ‘þ’ , ‘þ’ , $str );
$str = str_replace ( ‘ÿ’ , ‘ÿ’ , $str );

Источник

Читайте также:  Html не работает border radius
Оцените статью