Имеется такая ситуация: копирую текст из ворда, содержащий знак тире, и вставляю в форму в поле input.
После отправки php обработчик сохраняет в mysql базу символ тире, а мне нужно, чтобы вместо тире в базу сохранялся дефис.
Подскажите пожалуйста, как это можно сделать.
str_replace не помогает, так как в редактор (adode dreamweaver) знак тире вставляется в виде дефиса, то есть в str_replace его у меня не получается прописать.
Заранее большое спасибо!
Спустя 4 часа, 3 минуты, 36 секунд (18.09.2012 - 06:19) GET написал(а):
$a='php-html';
$a=str_replace('-','—',$a);
echo $a;//php — html
?
$a=str_replace('-','—',$a);
Спустя 1 час, 6 минут, 9 секунд (18.09.2012 - 07:26) kristall написал(а):
У тире, в отличие от дефиса, должны быть пробелы по краям. Причем перед тире пробел неразрывный.
человек-паук
программирование - это отладка
$a = str_replace(array(' - ', ' - '), ' — ', $a);
Подсветчик кода жрет и —, зараза.
человек-паук
программирование - это отладка
$a = str_replace(array(' - ', ' - '), ' — ', $a);
Подсветчик кода жрет и —, зараза.
Спустя 4 часа, 16 минут, 53 секунды (18.09.2012 - 11:43) Stryker2k написал(а):
Спасибо, попробую!
Спустя 8 дней, 14 часов, 16 минут, 52 секунды (27.09.2012 - 01:59) Stryker2k написал(а):
К сожалению, предложенные варианты не подходят для тире из ворда.
Вот сам код в упрощенном виде:
Этот скрипт убирает дефисы и длинные тире, а тире, скопированное из ворда, почему-то не убирает.
Предложенный выше вариант с nbsp также не работает.
Как вариант, думаю, можно убрать его с помощью регулярного выражения "пробел + символ, не относящийся к буквам и цифрам + пробел", но познаний самостоятельно написать такое выражение не хватает.
Кто-нибудь может помочь составить такое выражение?
Заранее большое спасибо!
Вот сам код в упрощенном виде:
<?php
if (!isset($text)) {
?>
<form method="post">
<input type="text" name="text">
<input type="submit">
</form>
<?php
}
else {
$text = str_replace("—", "-", $text); // это заменяет длинное тире на дефис, но почему-то не работает для тире из ворда
$text = preg_replace( "/[[:punct:]]/", '', $text); // альтернативный вариант, чтобы убрать все знаки препинания, для тире не срабатывает
echo $text;
}
?>
Этот скрипт убирает дефисы и длинные тире, а тире, скопированное из ворда, почему-то не убирает.
Предложенный выше вариант с nbsp также не работает.
Как вариант, думаю, можно убрать его с помощью регулярного выражения "пробел + символ, не относящийся к буквам и цифрам + пробел", но познаний самостоятельно написать такое выражение не хватает.
Кто-нибудь может помочь составить такое выражение?
Заранее большое спасибо!
Спустя 7 минут, 28 секунд (27.09.2012 - 02:07) GET написал(а):
Сделай echo ord($str); для этого тире из ворда, что это за символ такой?
Спустя 9 часов, 3 минуты, 57 секунд (27.09.2012 - 11:11) Placido написал(а):
Существует два вида тире - длинное (m-dash) и короткое (n-dash). Набирается в Ворде так: m-dash - Ctrl+Alt+"-", n-dash - Ctrl+"-".
Спустя 14 часов, 1 минута, 39 секунд (28.09.2012 - 01:12) Stryker2k написал(а):
Когда делал echo ord($str) выдавало 226, что ввело меня в легкий ступор.
Проблему решил кардинально - заменяю в строке на дефисы все символы, кроме латинских букв и цифр (что мне и нужно).
Проблему решил кардинально - заменяю в строке на дефисы все символы, кроме латинских букв и цифр (что мне и нужно).
$text = preg_replace ("/[^a-zA-Z0-9\s]/","-",$text);